다음을 통해 공유


TaskFactory 클래스

정의

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

public ref class TaskFactory
public class TaskFactory
type TaskFactory = class
Public Class TaskFactory
상속
TaskFactory

예제

다음 예제에서는 정적 Factory 속성을 사용하여 메서드를 두 개 호출합니다 TaskFactory.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[] tasks = new Task[2];
      String[] files = null;
      String[] dirs = null;
      String docsDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

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

      Task.Factory.ContinueWhenAll(tasks, completedTasks => {
                                             Console.WriteLine("{0} contains: ", docsDirectory);
                                             Console.WriteLine("   {0} subdirectories", dirs.Length);
                                             Console.WriteLine("   {0} files", files.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
      Dim files() As String = Nothing
      Dim dirs() As String = Nothing
      Dim docsDirectory As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
      
      tasks(0) = Task.Factory.StartNew( Sub()
                                           files = Directory.GetFiles(docsDirectory)
                                        End Sub )
      tasks(1) = Task.Factory.StartNew( Sub()
                                           dirs = Directory.GetDirectories(docsDirectory)
                                        End Sub )
      Task.Factory.ContinueWhenAll(tasks, Sub(completedTasks)
                                             Console.WriteLine("{0} contains: ", docsDirectory)
                                             Console.WriteLine("   {0} subdirectories", dirs.Length)
                                             Console.WriteLine("   {0} files", files.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 만들고 개체를 만드는 Task Task<TResult> 클래스입니다. 이 메서드의 오버로드를 호출하여 기본이 아닌 인수가 필요한 작업을 만들고 실행할 수 있습니다.

    경고

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

  • TaskFactory<TResult> 개체를 만드는 Task<TResult> 클래스입니다.

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

  • 작업을 만들고 메서드를 호출하여 즉시 시작합니다 StartNew .

    경고

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

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

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

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

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

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

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

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

   static void DoWork() {/*...*/ }
}
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(cts.Token,
                                     TaskCreationOptions.PreferFairness,
                                     TaskContinuationOptions.ExecuteSynchronously,
                                     New CustomScheduler())

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

   Sub DoWork()
      ' ...
   End Sub
End Module

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

생성자

TaskFactory()

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

TaskFactory(CancellationToken)

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

TaskFactory(CancellationToken, TaskCreationOptions, TaskContinuationOptions, TaskScheduler)

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

TaskFactory(TaskCreationOptions, TaskContinuationOptions)

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

TaskFactory(TaskScheduler)

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

속성

CancellationToken

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

ContinuationOptions

이 작업 팩터리에 대한 기본 작업 연속 옵션을 가져옵니다.

CreationOptions

이 작업 팩터리에 대한 기본 작업 만들기 옵션을 가져옵니다.

Scheduler

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

메서드

ContinueWhenAll(Task[], Action<Task[]>)

지정된 일련의 작업을 완료하면 시작되는 연속 작업을 만듭니다.

ContinueWhenAll(Task[], Action<Task[]>, CancellationToken)

지정된 일련의 작업을 완료하면 시작되는 연속 작업을 만듭니다.

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

지정된 일련의 작업을 완료하면 시작되는 연속 작업을 만듭니다.

ContinueWhenAll(Task[], Action<Task[]>, TaskContinuationOptions)

지정된 일련의 작업을 완료하면 시작되는 연속 작업을 만듭니다.

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

지정된 일련의 작업을 완료하면 시작되는 연속 작업을 만듭니다.

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

지정된 일련의 작업을 완료하면 시작되는 연속 작업을 만듭니다.

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

지정된 일련의 작업을 완료하면 시작되는 연속 작업을 만듭니다.

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

지정된 일련의 작업을 완료하면 시작되는 연속 작업을 만듭니다.

ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>[]>)

지정된 일련의 작업을 완료하면 시작되는 연속 작업을 만듭니다.

ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>[]>, CancellationToken)

지정된 일련의 작업을 완료하면 시작되는 연속 작업을 만듭니다.

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

지정된 일련의 작업을 완료하면 시작되는 연속 작업을 만듭니다.

ContinueWhenAll<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>[]>, TaskContinuationOptions)

지정된 일련의 작업을 완료하면 시작되는 연속 작업을 만듭니다.

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

지정된 일련의 작업을 완료하면 시작되는 연속 작업을 만듭니다.

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

지정된 일련의 작업을 완료하면 시작되는 연속 작업을 만듭니다.

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

지정된 일련의 작업을 완료하면 시작되는 연속 작업을 만듭니다.

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

지정된 일련의 작업을 완료하면 시작되는 연속 작업을 만듭니다.

ContinueWhenAny(Task[], Action<Task>)

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

ContinueWhenAny(Task[], Action<Task>, CancellationToken)

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

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

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

ContinueWhenAny(Task[], Action<Task>, TaskContinuationOptions)

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

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

제공된 집합에서 작업이 완료될 때 시작할 연속 Task<TResult>를 만듭니다.

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

제공된 집합에서 작업이 완료될 때 시작할 연속 Task<TResult>를 만듭니다.

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

제공된 집합에서 작업이 완료될 때 시작할 연속 Task<TResult>를 만듭니다.

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

제공된 집합에서 작업이 완료될 때 시작할 연속 Task<TResult>를 만듭니다.

ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>>)

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

ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>>, CancellationToken)

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

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

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

ContinueWhenAny<TAntecedentResult>(Task<TAntecedentResult>[], Action<Task<TAntecedentResult>>, TaskContinuationOptions)

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

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

제공된 집합에서 작업이 완료될 때 시작할 연속 Task<TResult>를 만듭니다.

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

제공된 집합에서 작업이 완료될 때 시작할 연속 Task<TResult>를 만듭니다.

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

제공된 집합에서 작업이 완료될 때 시작할 연속 Task<TResult>를 만듭니다.

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

제공된 집합에서 작업이 완료될 때 시작할 연속 Task<TResult>를 만듭니다.

Equals(Object)

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

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

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

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

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

FromAsync(IAsyncResult, Action<IAsyncResult>)

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

FromAsync(IAsyncResult, Action<IAsyncResult>, TaskCreationOptions)

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

FromAsync(IAsyncResult, Action<IAsyncResult>, TaskCreationOptions, TaskScheduler)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

지정된 Task<TResult>가 완료될 때 End 메서드 함수를 실행하는 IAsyncResult를 만듭니다.

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

지정된 Task<TResult>가 완료될 때 End 메서드 함수를 실행하는 IAsyncResult를 만듭니다.

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

지정된 Task<TResult>가 완료될 때 End 메서드 함수를 실행하는 IAsyncResult를 만듭니다.

GetHashCode()

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

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

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

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

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

(다음에서 상속됨 Object)
StartNew(Action)

지정된 동작 대리자에 대한 작업을 만들고 시작합니다.

StartNew(Action, CancellationToken)

지정된 동작 대리자 및 취소 토큰에 대한 작업을 만들고 시작합니다.

StartNew(Action, CancellationToken, TaskCreationOptions, TaskScheduler)

지정된 동작 대리자, 취소 토큰, 생성 옵션 및 상태에 대한 작업을 만들고 시작합니다.

StartNew(Action, TaskCreationOptions)

지정된 동작 대리자 및 생성 옵션에 대한 작업을 만들고 시작합니다.

StartNew(Action<Object>, Object)

지정된 동작 대리자 및 상태에 대한 작업을 만들고 시작합니다.

StartNew(Action<Object>, Object, CancellationToken)

지정된 동작 대리자, 상태 및 취소 토큰에 대한 작업을 만들고 시작합니다.

StartNew(Action<Object>, Object, CancellationToken, TaskCreationOptions, TaskScheduler)

지정된 동작 대리자, 상태, 취소 토큰, 생성 옵션 및 작업 스케줄러에 대한 작업을 만들고 시작합니다.

StartNew(Action<Object>, Object, TaskCreationOptions)

지정된 동작 대리자, 상태 및 생성 옵션에 대한 작업을 만들고 시작합니다.

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

지정된 함수 대리자 및 상태에 대한 TResult 형식의 작업을 만들고 시작합니다.

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

지정된 함수 대리자, 상태 및 취소 토큰에 대한 TResult 형식의 작업을 만들고 시작합니다.

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

지정된 함수 대리자, 상태, 취소 토큰, 생성 옵션 및 작업 스케줄러에 대한 TResult 형식의 작업을 만들고 시작합니다.

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

지정된 함수 대리자, 상태 및 생성 옵션에 대한 TResult 형식의 작업을 만들고 시작합니다.

StartNew<TResult>(Func<TResult>)

지정된 함수 대리자에 대한 TResult 형식의 작업을 만들고 시작합니다.

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

지정된 함수 대리자 및 취소 토큰에 대한 TResult 형식의 작업을 만들고 시작합니다.

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

지정된 함수 대리자, 취소 토큰, 생성 옵션 및 작업 스케줄러에 대한 TResult 형식의 작업을 만들고 시작합니다.

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

지정된 함수 대리자 및 생성 옵션에 대한 TResult 형식의 작업을 만들고 시작합니다.

ToString()

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

(다음에서 상속됨 Object)

적용 대상

스레드 보안

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

추가 정보