다음을 통해 공유


TaskFactory<TResult> 클래스

정의

Task<TResult> 개체를 만들고 예약하도록 지원합니다.

generic <typename TResult>
public ref class TaskFactory
public class TaskFactory<TResult>
type TaskFactory<'Result> = class
Public Class TaskFactory(Of TResult)

형식 매개 변수

TResult

이 클래스의 메서드가 Task<TResult> 만드는 개체의 반환 값입니다.

상속
TaskFactory<TResult>

예제

다음 예제에서는 정적 Factory 속성을 사용하여 메서드를 두 개 호출합니다 TaskFactory<TResult>.StartNew . 첫 번째 작업은 사용자의 MyDocuments 디렉터리에 있는 파일 이름으로 채워진 문자열 배열을 반환하고, 두 번째 작업은 사용자의 MyDocuments 디렉터리의 하위 디렉터리 이름으로 채워진 문자열 배열을 반환합니다. 그런 다음 두 태스크가 TaskFactory.ContinueWhenAll(Task[], Action<Task[]>) 실행을 완료한 후 반환된 배열의 파일 및 디렉터리 수에 대한 정보를 표시하는 메서드를 호출합니다.

using System;
using System.IO;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      Task<string[]>[] tasks = new Task<string[]>[2];
      String docsDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

      tasks[0] = Task<string[]>.Factory.StartNew( () => Directory.GetFiles(docsDirectory));
      tasks[1] = Task<string[]>.Factory.StartNew( () => Directory.GetDirectories(docsDirectory));

      Task.Factory.ContinueWhenAll(tasks, completedTasks => {
                                             Console.WriteLine("{0} contains: ", docsDirectory);
                                             Console.WriteLine("   {0} subdirectories", tasks[1].Result.Length);
                                             Console.WriteLine("   {0} files", tasks[0].Result.Length);
                                          } );
   }
}
// The example displays output like the following:
//       C:\Users\<username>\Documents contains:
//          24 subdirectories
//          16 files
Imports System.IO
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim tasks(1) As Task(Of String())
      Dim docsDirectory As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
      
      tasks(0) = Task(Of String()).Factory.StartNew( Function()Directory.GetFiles(docsDirectory) )
''                                        End Sub )
      tasks(1) = Task(Of String()).Factory.StartNew( Function() Directory.GetDirectories(docsDirectory) )
''                                        End Sub )
      Task.Factory.ContinueWhenAll(tasks, Sub(completedTasks)
                                             Console.WriteLine("{0} contains: ", docsDirectory)
                                             Console.WriteLine("   {0} subdirectories", tasks(1).Result.Length)
                                             Console.WriteLine("   {0} files", tasks(0).Result.Length)
                                          End Sub)
   End Sub
End Module
' The example displays output like the following:
'       C:\Users\<username>\Documents contains:
'          24 subdirectories
'          16 files

설명

.NET은 작업을 만들고 예약하기 위한 두 가지 팩터리를 제공합니다.

클래스를 TaskFactory<TResult> 사용하면 다음을 수행할 수 있습니다.

  • 작업을 만들고 메서드를 호출하여 즉시 시작합니다 StartNew . 이 메서드의 오버로드를 호출하여 기본이 아닌 인수가 필요한 작업을 만들고 실행할 수 있습니다.

    경고

    .NET Framework 4.5 Task.Run 부터 이 메서드는 기본 구성 값으로 작업을 만들고 즉시 시작하는 가장 쉬운 방법을 제공합니다.

  • 배열의 태스크 중 하나가 완료된 경우 또는 ContinueWhenAny 메서드를 호출 ContinueWhenAny 하여 시작하는 작업을 만듭니다.

  • 배열의 모든 작업이 완료된 경우 또는 ContinueWhenAll 메서드를 호출 ContinueWhenAll 하여 시작하는 작업을 만듭니다.

정적 Task<TResult>.Factory 속성은 기본 TaskFactory<TResult> 개체를 반환합니다. 클래스 생성자 중 TaskFactory<TResult> 하나를 호출하여 클래스가 만드는 개체를 Task<TResult> TaskFactory<TResult> 구성할 수도 있습니다. 다음 예제에서는 지정된 취소 토큰, 작업 만들기 옵션, 연속 옵션 및 사용자 지정된 작업 스케줄러가 있는 작업을 만들도록 새 TaskFactory<TResult> 개체를 구성합니다.

using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

public class Example
{
   static CancellationTokenSource cts = new CancellationTokenSource();

   static TaskFactory<int> factory = new TaskFactory<int>(
      cts.Token,
      TaskCreationOptions.PreferFairness,
      TaskContinuationOptions.ExecuteSynchronously,
      new CustomScheduler());

   static void Main()
   {
      var t2 = factory.StartNew(() => DoWork());
      cts.Dispose();
   }

   static int DoWork()
   {
       /*...*/
       return DateTime.Now.Hour <= 12 ?  1 : 2;
    }
}
Imports System.Collections.Generic
Imports System.Threading
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim cts As New CancellationTokenSource()
      Dim factory As New TaskFactory(Of Integer)(
                         cts.Token,
                         TaskCreationOptions.PreferFairness,
                         TaskContinuationOptions.ExecuteSynchronously,
                         New CustomScheduler())

      Dim t2 = factory.StartNew(Function() DoWork())
      cts.Dispose()
   End Sub

   Function DoWork() As Integer
      Return If(Date.Now.Hour <= 12, 1, 2)
   End Function
End Module

대부분의 경우 새 TaskFactory<TResult> 인스턴스를 인스턴스화할 필요가 없습니다. 대신 기본값을 사용하는 팩터리 개체를 반환하는 정적 Task<TResult>.Factory 속성을 사용할 수 있습니다. 그런 다음 메서드를 호출하여 새 작업을 시작하거나 작업 연속 작업을 정의할 수 있습니다. 일러스트레이션은 예제를 참조하세요.

생성자

TaskFactory<TResult>()

기본 구성을 사용하여 TaskFactory<TResult> 인스턴스를 초기화합니다.

TaskFactory<TResult>(CancellationToken)

기본 구성을 사용하여 TaskFactory<TResult> 인스턴스를 초기화합니다.

TaskFactory<TResult>(CancellationToken, TaskCreationOptions, TaskContinuationOptions, TaskScheduler)

지정된 구성을 사용하여 TaskFactory<TResult> 인스턴스를 초기화합니다.

TaskFactory<TResult>(TaskCreationOptions, TaskContinuationOptions)

지정된 구성을 사용하여 TaskFactory<TResult> 인스턴스를 초기화합니다.

TaskFactory<TResult>(TaskScheduler)

지정된 구성을 사용하여 TaskFactory<TResult> 인스턴스를 초기화합니다.

속성

CancellationToken

이 작업 팩터리에 대한 기본 취소 토큰을 가져옵니다.

ContinuationOptions

이 작업 팩터리에 대한 TaskContinuationOptions 열거형 값을 가져옵니다.

CreationOptions

이 작업 팩터리에 대한 TaskCreationOptions 열거형 값을 가져옵니다.

Scheduler

이 작업 팩터리에 대한 작업 스케줄러를 가져옵니다.

메서드

ContinueWhenAll(Task[], Func<Task[],TResult>)

제공된 작업 집합이 완료될 때 시작할 연속 작업을 만듭니다.

ContinueWhenAll(Task[], Func<Task[],TResult>, CancellationToken)

제공된 작업 집합이 완료될 때 시작할 연속 작업을 만듭니다.

ContinueWhenAll(Task[], Func<Task[],TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

제공된 작업 집합이 완료될 때 시작할 연속 작업을 만듭니다.

ContinueWhenAll(Task[], Func<Task[],TResult>, TaskContinuationOptions)

제공된 작업 집합이 완료될 때 시작할 연속 작업을 만듭니다.

ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>)

제공된 작업 집합이 완료될 때 시작할 연속 작업을 만듭니다.

ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, CancellationToken)

제공된 작업 집합이 완료될 때 시작할 연속 작업을 만듭니다.

ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

제공된 작업 집합이 완료될 때 시작할 연속 작업을 만듭니다.

ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[],TResult>, TaskContinuationOptions)

제공된 작업 집합이 완료될 때 시작할 연속 작업을 만듭니다.

ContinueWhenAny(Task[], Func<Task,TResult>)

제공된 집합에서 모든 작업이 완료될 때 시작할 연속 작업을 만듭니다.

ContinueWhenAny(Task[], Func<Task,TResult>, CancellationToken)

제공된 집합에서 모든 작업이 완료될 때 시작할 연속 작업을 만듭니다.

ContinueWhenAny(Task[], Func<Task,TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

제공된 집합에서 모든 작업이 완료될 때 시작할 연속 작업을 만듭니다.

ContinueWhenAny(Task[], Func<Task,TResult>, TaskContinuationOptions)

제공된 집합에서 모든 작업이 완료될 때 시작할 연속 작업을 만듭니다.

ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>)

제공된 집합에서 모든 작업이 완료될 때 시작할 연속 작업을 만듭니다.

ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>, CancellationToken)

제공된 집합에서 모든 작업이 완료될 때 시작할 연속 작업을 만듭니다.

ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

제공된 집합에서 모든 작업이 완료될 때 시작할 연속 작업을 만듭니다.

ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>,TResult>, TaskContinuationOptions)

제공된 집합에서 모든 작업이 완료될 때 시작할 연속 작업을 만듭니다.

Equals(Object)

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

(다음에서 상속됨 Object)
FromAsync(Func<AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, Object)

비동기 프로그래밍 모델 패턴을 따르는 Begin 및 End 메서드 쌍을 나타내는 작업을 만듭니다.

FromAsync(Func<AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, Object, TaskCreationOptions)

비동기 프로그래밍 모델 패턴을 따르는 Begin 및 End 메서드 쌍을 나타내는 작업을 만듭니다.

FromAsync(IAsyncResult, Func<IAsyncResult,TResult>)

지정된 IAsyncResult가 완료될 때 End 메서드 함수를 실행하는 작업을 만듭니다.

FromAsync(IAsyncResult, Func<IAsyncResult,TResult>, TaskCreationOptions)

지정된 IAsyncResult가 완료될 때 End 메서드 함수를 실행하는 작업을 만듭니다.

FromAsync(IAsyncResult, Func<IAsyncResult,TResult>, TaskCreationOptions, TaskScheduler)

지정된 IAsyncResult가 완료될 때 End 메서드 함수를 실행하는 작업을 만듭니다.

FromAsync<TArg1,TArg2,TArg3>(Func<TArg1,TArg2,TArg3,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, TArg3, Object)

비동기 프로그래밍 모델 패턴을 따르는 Begin 및 End 메서드 쌍을 나타내는 작업을 만듭니다.

FromAsync<TArg1,TArg2,TArg3>(Func<TArg1,TArg2,TArg3,AsyncCallback, Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, TArg3, Object, TaskCreationOptions)

비동기 프로그래밍 모델 패턴을 따르는 Begin 및 End 메서드 쌍을 나타내는 작업을 만듭니다.

FromAsync<TArg1,TArg2>(Func<TArg1,TArg2,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, Object)

비동기 프로그래밍 모델 패턴을 따르는 Begin 및 End 메서드 쌍을 나타내는 작업을 만듭니다.

FromAsync<TArg1,TArg2>(Func<TArg1,TArg2,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, TArg2, Object, TaskCreationOptions)

비동기 프로그래밍 모델 패턴을 따르는 Begin 및 End 메서드 쌍을 나타내는 작업을 만듭니다.

FromAsync<TArg1>(Func<TArg1,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, Object)

비동기 프로그래밍 모델 패턴을 따르는 Begin 및 End 메서드 쌍을 나타내는 작업을 만듭니다.

FromAsync<TArg1>(Func<TArg1,AsyncCallback,Object,IAsyncResult>, Func<IAsyncResult,TResult>, TArg1, Object, TaskCreationOptions)

비동기 프로그래밍 모델 패턴을 따르는 Begin 및 End 메서드 쌍을 나타내는 작업을 만듭니다.

GetHashCode()

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

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

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

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

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

(다음에서 상속됨 Object)
StartNew(Func<Object,TResult>, Object)

작업을 만들고 시작합니다.

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

작업을 만들고 시작합니다.

StartNew(Func<Object,TResult>, Object, CancellationToken, TaskCreationOptions, TaskScheduler)

작업을 만들고 시작합니다.

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

작업을 만들고 시작합니다.

StartNew(Func<TResult>)

작업을 만들고 시작합니다.

StartNew(Func<TResult>, CancellationToken)

작업을 만들고 시작합니다.

StartNew(Func<TResult>, CancellationToken, TaskCreationOptions, TaskScheduler)

작업을 만들고 시작합니다.

StartNew(Func<TResult>, TaskCreationOptions)

작업을 만들고 시작합니다.

ToString()

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

(다음에서 상속됨 Object)

적용 대상

스레드 보안

모든 공용 및 보호된 멤버 TaskFactory<TResult> 는 스레드로부터 안전하며 여러 스레드에서 동시에 사용할 수 있습니다.

추가 정보