Task<TResult> 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
값을 반환할 수 있는 비동기 작업을 나타냅니다.
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> 개체는 .NET Framework 4에 처음 도입된 작업 기반 비동기 패턴 중앙 구성 요소 중 하나입니다. Task<TResult> 개체에서 수행하는 작업은 일반적으로 주 애플리케이션 스레드에서 동기적으로 실행되지 않고 스레드 풀 스레드에서 비동기적으로 실행되므로 IsCanceled, IsCompleted및 IsFaulted 속성뿐만 아니라 Status 속성을 사용하여 작업의 상태를 확인할 수 있습니다. 가장 일반적으로 람다 식은 태스크가 수행할 작업을 지정하는 데 사용됩니다.
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 항목의 "문화권 및 작업 기반 비동기 작업" 섹션을 참조하세요. 스토어 앱은 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 |
Task 조기에 종료된 AggregateException 가져옵니다.
Task 성공적으로 완료되었거나 아직 예외를 throw하지 않은 경우 |
Factory |
Task<TResult> 인스턴스를 만들고 구성하기 위한 팩터리 메서드를 가져옵니다. |
Id |
이 Task 인스턴스의 ID를 가져옵니다. (다음에서 상속됨 Task) |
IsCanceled |
이 Task 인스턴스가 취소되어 실행을 완료했는지 여부를 가져옵니다. (다음에서 상속됨 Task) |
IsCompleted |
작업이 완료되었는지 여부를 나타내는 값을 가져옵니다. (다음에서 상속됨 Task) |
IsCompletedSuccessfully |
작업이 완료될 때 실행되었는지 여부를 가져옵니다. (다음에서 상속됨 Task) |
IsFaulted |
처리되지 않은 예외로 인해 Task 완료되었는지 여부를 가져옵니다. (다음에서 상속됨 Task) |
Result |
이 Task<TResult>결과 값을 가져옵니다. |
Status |
이 작업의 TaskStatus 가져옵니다. (다음에서 상속됨 Task) |
메서드
명시적 인터페이스 구현
IAsyncResult.AsyncWaitHandle |
작업이 완료될 때까지 기다리는 데 사용할 수 있는 WaitHandle 가져옵니다. (다음에서 상속됨 Task) |
IAsyncResult.CompletedSynchronously |
작업이 동기적으로 완료되었는지 여부를 나타내는 표시를 가져옵니다. (다음에서 상속됨 Task) |
확장 메서드
적용 대상
스레드 보안
Dispose()제외한 Task<TResult>모든 멤버는 스레드로부터 안전하며 여러 스레드에서 동시에 사용할 수 있습니다.
추가 정보
- Task
- TPL(작업 병렬 라이브러리)
- 작업 기반 비동기 프로그래밍
- .NET Core 및 .NET Standard 사용한 병렬 프로그래밍에 대한
샘플
.NET