Task<TResult> 클래스

정의

값을 반환할 수 있는 비동기 작업을 나타냅니다.

generic <typename TResult>
public ref class Task : System::Threading::Tasks::Task
public class Task<TResult> : System.Threading.Tasks.Task
type Task<'Result> = class
    inherit Task
Public Class Task(Of TResult)
Inherits Task

형식 매개 변수

TResult

Task<TResult>에서 생성되는 결과의 형식입니다.

상속
Task<TResult>

설명

클래스는 Task<TResult> 값을 반환하고 일반적으로 비동기적으로 실행되는 단일 작업을 나타냅니다. Task<TResult>개체는 .NET Framework 4에 처음 도입된 작업 기반 비동기 패턴의 핵심 구성 요소 중 하나입니다. 작업을 수행 하므로 Task<TResult> 개체 일반적으로 비동기적으로 실행 스레드 풀 스레드에서 동기적으로 주 애플리케이션 스레드에서 사용할 수 있습니다 것이 아니라 합니다 Status 속성인 뿐만 IsCanceled, IsCompleted, 및 IsFaulted 속성에는 작업의 상태를 확인 합니다. 가장 일반적으로 람다 식은 태스크가 수행할 작업을 지정하는 데 사용됩니다.

Task<TResult> 인스턴스는 다양한 방법으로 만들 수 있습니다. .NET Framework 4.5부터 사용할 수 있는 가장 일반적인 방법은 정적 Task.Run<TResult>(Func<TResult>) 또는 Task.Run<TResult>(Func<TResult>, CancellationToken) 메서드를 호출하는 것입니다. 이러한 메서드는 기본값을 사용하고 추가 매개 변수를 가져오지 않고 작업을 시작하는 간단한 방법을 제공합니다. 다음 예제에서는 이 메서드를 사용하여 Task.Run<TResult>(Func<TResult>) 루프를 시작한 다음 루프 반복 횟수를 표시하는 작업을 시작합니다.

using System;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      var t = Task<int>.Run( () => {
                                      // Just loop.
                                      int max = 1000000;
                                      int ctr = 0;
                                      for (ctr = 0; ctr <= max; ctr++) {
                                         if (ctr == max / 2 && DateTime.Now.Hour <= 12) {
                                            ctr++;
                                            break;
                                         }
                                      }
                                      return ctr;
                                    } );
      Console.WriteLine("Finished {0:N0} iterations.", t.Result);
   }
}
// The example displays output like the following:
//        Finished 1,000,001 loop iterations.
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim t As Task(Of Integer) = Task.Run(Function()
                                  Dim max As Integer = 1000000
                                  Dim ctr As Integer
                                  For ctr = 0 to max
                                     If ctr = max \ 2 And Date.Now.Hour <= 12 Then
                                        ctr += 1
                                        Exit For
                                     End If
                                  Next
                                  Return ctr
                               End Function)
      Console.WriteLine("Finished {0:N0} iterations.", t.Result)
   End Sub
End Module
' The example displays the following output:
'       Finished 1,000,001 loop iterations

또는 .NET Framework 4에서 작업을 시작하는 가장 일반적인 방법은 정적 TaskFactory.StartNew 또는 TaskFactory<TResult>.StartNew 메서드를 호출하는 것입니다. 속성은 Task.Factory 개체를 TaskFactory 반환하고 속성은 Task<TResult>.Factory 개체를 반환합니다 TaskFactory<TResult> . 메서드의 오버로드를 StartNew 사용하면 인수를 전달하고, 작업 만들기 옵션을 정의하고, 작업 스케줄러를 지정할 수 있습니다. 다음 예제에서는 메서드를 TaskFactory<TResult>.StartNew(Func<TResult>) 사용하여 작업을 시작합니다. 이전 예제의 코드와 기능적으로 동일합니다.

using System;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      var t = Task<int>.Factory.StartNew( () => {
                                      // Just loop.
                                      int max = 1000000;
                                      int ctr = 0;
                                      for (ctr = 0; ctr <= max; ctr++) {
                                         if (ctr == max / 2 && DateTime.Now.Hour <= 12) {
                                            ctr++;
                                            break;
                                         }
                                      }
                                      return ctr;
                               } );
      Console.WriteLine("Finished {0:N0} iterations.", t.Result);
   }
}
// The example displays the following output:
//        Finished 1000001 loop iterations
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim t = Task(Of Integer).Factory.StartNew(Function()
                                  Dim max As Integer = 1000000
                                  Dim ctr As Integer
                                  For ctr = 0 to max
                                     If ctr = max \ 2 And Date.Now.Hour <= 12 Then
                                       ctr += 1
                                       Exit For
                                     End If
                                  Next
                                  Return ctr
                               End Function)
      Console.WriteLine("Finished {0:N0} iterations.", t.Result)
   End Sub
End Module
' The example displays output like the following:
'       Finished 1,000,001 iterations

자세한 예제는 작업 기반 비동기 프로그래밍을 참조하세요.

이 클래스는 Task<TResult> 작업을 초기화하지만 실행을 예약하지 않는 생성자도 제공합니다. 성능상의 이유로 Task.Run 계산 작업을 만들고 예약하기 위한 기본 메커니즘과 Task.Factory.StartNew 메서드가 있지만 작업 만들기 및 일정 예약을 구분해야 하는 시나리오의 경우 생성자를 사용할 수 있으며 Start 작업 메서드를 사용하여 나중에 작업을 실행하도록 예약할 수 있습니다.

.NET Framework 4.6을 대상으로 하는 데스크톱 앱부터 작업을 만들고 호출하는 스레드의 문화권이 스레드 컨텍스트의 일부가 됩니다. 즉, 태스크가 실행되는 스레드의 현재 문화권에 관계없이 태스크의 현재 문화권은 호출 스레드의 문화권입니다. .NET Framework 4.6 이전 버전의 .NET Framework 대상으로 하는 앱의 경우 태스크의 문화권은 태스크가 실행되는 스레드의 문화권입니다. 자세한 내용은 항목의 "문화권 및 작업 기반 비동기 작업" 섹션을 CultureInfo 참조하세요. Microsoft Store 앱은 기본 문화권을 설정하고 가져오는 Windows 런타임 따릅니다.

값을 반환하지 않는 작업의 경우 클래스를 Task 사용합니다. C# 7.0부터 참조 형식이 아닌 값 형식인 좀 더 간단한 작업의 경우 구조를 사용합니다 System.Threading.Tasks.ValueTask<TResult> .

생성자

Task<TResult>(Func<Object,TResult>, Object)

지정된 함수 및 상태를 사용하여 새 Task<TResult>을 초기화합니다.

Task<TResult>(Func<Object,TResult>, Object, CancellationToken)

지정된 작업, 상태 및 옵션을 사용하여 새 Task<TResult>를 초기화합니다.

Task<TResult>(Func<Object,TResult>, Object, CancellationToken, TaskCreationOptions)

지정된 작업, 상태 및 옵션을 사용하여 새 Task<TResult>를 초기화합니다.

Task<TResult>(Func<Object,TResult>, Object, TaskCreationOptions)

지정된 작업, 상태 및 옵션을 사용하여 새 Task<TResult>를 초기화합니다.

Task<TResult>(Func<TResult>)

지정된 함수를 사용하여 새 Task<TResult>을 초기화합니다.

Task<TResult>(Func<TResult>, CancellationToken)

지정된 함수를 사용하여 새 Task<TResult>을 초기화합니다.

Task<TResult>(Func<TResult>, CancellationToken, TaskCreationOptions)

지정된 함수 및 만들기 옵션을 사용하여 새 Task<TResult>을 초기화합니다.

Task<TResult>(Func<TResult>, TaskCreationOptions)

지정된 함수 및 만들기 옵션을 사용하여 새 Task<TResult>을 초기화합니다.

속성

AsyncState

Task를 만들 때 제공된 상태 개체 또는 제공된 개체가 없는 경우 null을 가져옵니다.

(다음에서 상속됨 Task)
CreationOptions

이 작업을 만드는 데 사용된 TaskCreationOptions를 가져옵니다.

(다음에서 상속됨 Task)
Exception

AggregateException가 중간에 종료되도록 하는 Task을 가져옵니다. Task가 완료되었거나 예외를 아직 throw하지 않았을 경우 null을 반환합니다.

(다음에서 상속됨 Task)
Factory

인스턴스를 만들고 구성 Task<TResult> 하기 위한 팩터리 메서드를 가져옵니다.

Id

Task 인스턴스에 대한 ID를 가져옵니다.

(다음에서 상속됨 Task)
IsCanceled

Task 인스턴스가 취소되어 실행을 완료했는지 여부를 가져옵니다.

(다음에서 상속됨 Task)
IsCompleted

작업이 완료되었는지 여부를 나타내는 값을 가져옵니다.

(다음에서 상속됨 Task)
IsCompletedSuccessfully

작업이 완료될 때까지 실행되었는지 여부를 가져옵니다.

(다음에서 상속됨 Task)
IsFaulted

처리되지 않은 예외로 인해 Task가 완료되었는지 여부를 가져옵니다.

(다음에서 상속됨 Task)
Result

Task<TResult>의 결과 값을 가져옵니다.

Status

이 작업의 TaskStatus를 가져옵니다.

(다음에서 상속됨 Task)

메서드

ConfigureAwait(Boolean)

Task<TResult>를 기다리는 데 사용되는 awaiter를 구성합니다.

ConfigureAwait(Boolean)

Task를 기다리는 데 사용되는 awaiter를 구성합니다.

(다음에서 상속됨 Task)
ContinueWith(Action<Task,Object>, Object)

호출자 제공 상태 정보를 받으며 대상 Task이(가) 완료되면 실행되는 연속 작업을 만듭니다.

(다음에서 상속됨 Task)
ContinueWith(Action<Task,Object>, Object, CancellationToken)

대상 Task가 완료될 때 호출자 제공 상태 정보 및 취소 토큰을 받고 비동기적으로 실행되는 연속 작업을 만듭니다.

(다음에서 상속됨 Task)
ContinueWith(Action<Task,Object>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler)

대상 Task가 완료될 때 호출자 제공 상태 정보 및 취소 토큰을 받고 실행되는 연속 작업을 만듭니다. 연속 작업은 지정된 조건의 집합에 따라 실행되며 지정된 스케줄러를 사용합니다.

(다음에서 상속됨 Task)
ContinueWith(Action<Task,Object>, Object, TaskContinuationOptions)

호출자 제공 상태 정보를 받으며 대상 Task이(가) 완료되면 실행되는 연속 작업을 만듭니다. 연속 작업은 지정된 조건의 집합에 따라 실행됩니다.

(다음에서 상속됨 Task)
ContinueWith(Action<Task,Object>, Object, TaskScheduler)

호출자 제공 상태 정보를 받으며 대상 Task이(가) 완료되면 비동기적으로 실행되는 연속 작업을 만듭니다. 연속 작업은 지정된 스케줄러를 사용합니다.

(다음에서 상속됨 Task)
ContinueWith(Action<Task<TResult>,Object>, Object)

상태 정보가 전달되며 대상 Task<TResult>이 완료되면 실행되는 연속 작업을 만듭니다.

ContinueWith(Action<Task<TResult>,Object>, Object, CancellationToken)

대상 Task<TResult>이 완료될 때 실행되는 연속 작업을 만듭니다.

ContinueWith(Action<Task<TResult>,Object>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler)

대상 Task<TResult>이 완료될 때 실행되는 연속 작업을 만듭니다.

ContinueWith(Action<Task<TResult>,Object>, Object, TaskContinuationOptions)

대상 Task<TResult>이 완료될 때 실행되는 연속 작업을 만듭니다.

ContinueWith(Action<Task<TResult>,Object>, Object, TaskScheduler)

대상 Task<TResult>이 완료될 때 실행되는 연속 작업을 만듭니다.

ContinueWith(Action<Task<TResult>>)

대상 작업이 완료될 때 비동기적으로 실행되는 연속 작업을 만듭니다.

ContinueWith(Action<Task<TResult>>, CancellationToken)

대상 Task<TResult>이 완료될 때 비동기적으로 실행되는 취소 가능 연속 작업을 만듭니다.

ContinueWith(Action<Task<TResult>>, CancellationToken, TaskContinuationOptions, TaskScheduler)

continuationOptions에 지정된 조건에 따라 실행되는 연속 작업을 만듭니다.

ContinueWith(Action<Task<TResult>>, TaskContinuationOptions)

continuationOptions에 지정된 조건에 따라 실행되는 연속 작업을 만듭니다.

ContinueWith(Action<Task<TResult>>, TaskScheduler)

대상 Task<TResult>가 완료될 때 비동기적으로 실행되는 연속 작업을 만듭니다.

ContinueWith(Action<Task>)

대상 Task가 완료될 때 비동기적으로 실행되는 연속 작업을 만듭니다.

(다음에서 상속됨 Task)
ContinueWith(Action<Task>, CancellationToken)

대상 Task가 완료될 때 취소 토큰을 받고 비동기적으로 실행되는 연속 작업을 만듭니다.

(다음에서 상속됨 Task)
ContinueWith(Action<Task>, CancellationToken, TaskContinuationOptions, TaskScheduler)

지정된 TaskContinuationOptions에 따라 대상 작업이 완료되면 실행되는 연속 작업을 만듭니다. 연속 작업은 취소 토큰을 받고 지정된 스케줄러를 사용합니다.

(다음에서 상속됨 Task)
ContinueWith(Action<Task>, TaskContinuationOptions)

지정된 TaskContinuationOptions에 따라 대상 작업이 완료되면 실행되는 연속 작업을 만듭니다.

(다음에서 상속됨 Task)
ContinueWith(Action<Task>, TaskScheduler)

대상 Task가 완료될 때 비동기적으로 실행되는 연속 작업을 만듭니다. 연속 작업은 지정된 스케줄러를 사용합니다.

(다음에서 상속됨 Task)
ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object)

대상 Task<TResult>이 완료될 때 실행되는 연속 작업을 만듭니다.

ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, CancellationToken)

대상 Task<TResult>이 완료될 때 실행되는 연속 작업을 만듭니다.

ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler)

대상 Task<TResult>이 완료될 때 실행되는 연속 작업을 만듭니다.

ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, TaskContinuationOptions)

대상 Task<TResult>이 완료될 때 실행되는 연속 작업을 만듭니다.

ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, TaskScheduler)

대상 Task<TResult>이 완료될 때 실행되는 연속 작업을 만듭니다.

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>)

대상 Task<TResult>가 완료될 때 비동기적으로 실행되는 연속 작업을 만듭니다.

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, CancellationToken)

대상 Task<TResult>가 완료될 때 비동기적으로 실행되는 연속 작업을 만듭니다.

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

continuationOptions에 지정된 조건에 따라 실행되는 연속 작업을 만듭니다.

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, TaskContinuationOptions)

continuationOptions에 지정된 조건에 따라 실행되는 연속 작업을 만듭니다.

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, TaskScheduler)

대상 Task<TResult>가 완료될 때 비동기적으로 실행되는 연속 작업을 만듭니다.

ContinueWith<TResult>(Func<Task,Object,TResult>, Object)

호출자 제공 상태 정보를 받으며 대상 Task이(가) 완료되고 값을 가져오면 비동기적으로 실행되는 연속 작업을 만듭니다.

(다음에서 상속됨 Task)
ContinueWith<TResult>(Func<Task,Object,TResult>, Object, CancellationToken)

대상 Task이(가) 완료되고 값을 가져오면 비동기적으로 실행되는 연속 작업을 만듭니다. 연속 작업은 호출자 제공한 상태 정보 및 취소 토큰을 받습니다.

(다음에서 상속됨 Task)
ContinueWith<TResult>(Func<Task,Object,TResult>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler)

대상 Task가 완료되고 값을 반환하면 지정된 작업 연속 옵션에 따라 실행되는 연속 작업을 만듭니다. 연속 작업은 호출자 제공 상태 정보 및 취소 토큰을 받고 지정된 스케줄러를 사용합니다.

(다음에서 상속됨 Task)
ContinueWith<TResult>(Func<Task,Object,TResult>, Object, TaskContinuationOptions)

대상 Task가 완료되면 지정된 작업 연속 옵션에 따라 실행되는 연속 작업을 만듭니다. 연속 작업은 호출자 제공 상태 정보를 받습니다.

(다음에서 상속됨 Task)
ContinueWith<TResult>(Func<Task,Object,TResult>, Object, TaskScheduler)

대상 Task가 완료될 때 비동기적으로 실행되는 연속 작업을 만듭니다. 연속 작업은 호출자 제공 상태 정보를 받고 지정된 스케줄러를 사용합니다.

(다음에서 상속됨 Task)
ContinueWith<TResult>(Func<Task,TResult>)

대상 Task<TResult>이(가) 완료되고 값을 가져오면 비동기적으로 실행되는 연속 작업을 만듭니다.

(다음에서 상속됨 Task)
ContinueWith<TResult>(Func<Task,TResult>, CancellationToken)

대상 Task이(가) 완료되고 값을 가져오면 비동기적으로 실행되는 연속 작업을 만듭니다. 연속 작업은 취소 토큰을 받습니다.

(다음에서 상속됨 Task)
ContinueWith<TResult>(Func<Task,TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

지정된 연속 작업 옵션에 따라 실행되고 값을 반환하는 연속 작업을 만듭니다. 연속 작업에 취소 토큰이 전달되고, 연속 작업은 지정된 스케줄러를 사용합니다.

(다음에서 상속됨 Task)
ContinueWith<TResult>(Func<Task,TResult>, TaskContinuationOptions)

지정된 연속 작업 옵션에 따라 실행되고 값을 반환하는 연속 작업을 만듭니다.

(다음에서 상속됨 Task)
ContinueWith<TResult>(Func<Task,TResult>, TaskScheduler)

대상 Task이(가) 완료되고 값을 가져오면 비동기적으로 실행되는 연속 작업을 만듭니다. 연속 작업은 지정된 스케줄러를 사용합니다.

(다음에서 상속됨 Task)
Dispose()

Task 클래스의 현재 인스턴스에서 사용하는 모든 리소스를 해제합니다.

(다음에서 상속됨 Task)
Dispose(Boolean)

Task를 삭제하고 관리되지 않는 해당 리소스를 모두 해제합니다.

(다음에서 상속됨 Task)
Equals(Object)

지정된 개체가 현재 개체와 같은지 확인합니다.

(다음에서 상속됨 Object)
GetAwaiter()

Task<TResult>를 기다리는 데 사용되는 awaiter를 가져옵니다.

GetAwaiter()

Task를 기다리는 데 사용되는 awaiter를 가져옵니다.

(다음에서 상속됨 Task)
GetHashCode()

기본 해시 함수로 작동합니다.

(다음에서 상속됨 Object)
GetType()

현재 인스턴스의 Type을 가져옵니다.

(다음에서 상속됨 Object)
MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.

(다음에서 상속됨 Object)
RunSynchronously()

현재 Task에서 TaskScheduler를 동기적으로 실행합니다.

(다음에서 상속됨 Task)
RunSynchronously(TaskScheduler)

제공된 Task에서 TaskScheduler를 동기적으로 실행합니다.

(다음에서 상속됨 Task)
Start()

Task를 시작하고 현재 TaskScheduler에 실행을 예약합니다.

(다음에서 상속됨 Task)
Start(TaskScheduler)

Task를 시작하고 지정된 TaskScheduler에 실행을 예약합니다.

(다음에서 상속됨 Task)
ToString()

현재 개체를 나타내는 문자열을 반환합니다.

(다음에서 상속됨 Object)
Wait()

Task의 실행이 완료되기를 기다립니다.

(다음에서 상속됨 Task)
Wait(CancellationToken)

Task의 실행이 완료되기를 기다립니다. 작업이 완료되기 전에 취소 토큰이 취소되면 대기가 종료됩니다.

(다음에서 상속됨 Task)
Wait(Int32)

Task가 지정된 시간(밀리초) 내에 실행을 완료할 때까지 기다립니다.

(다음에서 상속됨 Task)
Wait(Int32, CancellationToken)

Task의 실행이 완료되기를 기다립니다. 작업이 완료되기 전에 취소 토큰이 취소되었거나 시간 제한 간격이 경과되었으면 대기가 종료됩니다.

(다음에서 상속됨 Task)
Wait(TimeSpan)

Task가 지정된 시간 간격 내에 실행을 완료할 때까지 기다립니다.

(다음에서 상속됨 Task)
Wait(TimeSpan, CancellationToken)

Task의 실행이 완료되기를 기다립니다.

(다음에서 상속됨 Task)
WaitAsync(CancellationToken)

Task<TResult>Task<TResult> 작업이 완료되거나 지정된 취소가 요청된 경우 완료되는 CancellationToken 값을 가져옵니다.

WaitAsync(CancellationToken)

TaskTask 작업이 완료되거나 지정된 취소가 요청된 경우 완료되는 CancellationToken 값을 가져옵니다.

(다음에서 상속됨 Task)
WaitAsync(TimeSpan)

Task<TResult>Task<TResult> 작업이 완료되거나 지정된 시간 제한이 만료될 때 완료되는 값을 가져옵니다.

WaitAsync(TimeSpan)

TaskTask 작업이 완료되거나 지정된 시간 제한이 만료될 때 완료되는 값을 가져옵니다.

(다음에서 상속됨 Task)
WaitAsync(TimeSpan, CancellationToken)

Task<TResult>Task<TResult> 작업이 완료되거나 지정된 시간 제한이 만료되거나 지정된 취소가 요청된 경우 완료되는 CancellationToken 값을 가져옵니다.

WaitAsync(TimeSpan, CancellationToken)

TaskTask 작업이 완료되거나 지정된 시간 제한이 만료되거나 지정된 취소가 요청된 경우 완료되는 CancellationToken 값을 가져옵니다.

(다음에서 상속됨 Task)

명시적 인터페이스 구현

IAsyncResult.AsyncWaitHandle

작업이 완료되기를 기다리는 데 사용할 수 있는 WaitHandle을 가져옵니다.

(다음에서 상속됨 Task)
IAsyncResult.CompletedSynchronously

작업이 동기적으로 완료되었는지 여부를 나타내는 표시를 가져옵니다.

(다음에서 상속됨 Task)

확장 메서드

DispatcherOperationWait(Task)

기본 DispatcherOperation이 완료되기를 무기한 기다립니다.

DispatcherOperationWait(Task, TimeSpan)

그런 다음 지정된 시간 동안 기본 DispatcherOperation이 완료되기를 기다립니다.

IsDispatcherOperationTask(Task)

TaskDispatcherOperation과 연결되어 있는지 여부를 나타내는 값을 반환합니다.

AsAsyncAction(Task)

시작된 작업을 나타내는 Windows 런타임 비동기 작업을 반환합니다.

AsAsyncOperation<TResult>(Task<TResult>)

결과를 반환하는 시작된 작업을 나타내는 Windows 런타임 비동기 작업을 반환합니다.

적용 대상

스레드 보안

를 제외한 Dispose()모든 멤버Task<TResult>는 스레드로부터 안전하며 여러 스레드에서 동시에 사용할 수 있습니다.

추가 정보