작업 팩터리
작업 팩터리는 Task 개체를 만드는 System.Threading.Tasks.TaskFactory 클래스 또는 Task<TResult> 개체를 만드는 System.Threading.Tasks.TaskFactory<TResult> 클래스로 표현됩니다. 두 클래스에 포함된 메서드는 다음을 수행하는 데 사용할 수 있습니다.
작업을 만들고 즉시 시작합니다. 자세한 내용은 작업 병렬 처리(작업 병렬 라이브러리)를 참조하십시오.
작업 배열의 일부 또는 모두가 완료되면 시작하는 작업 연속을 만듭니다. 자세한 내용은 연속 작업을 참조하십시오.
비동기 프로그래밍 모델 패턴을 따르는 Begin/End 메서드 쌍을 나타내는 작업을 만듭니다. 자세한 내용은 TPL 및 일반적인 .NET 비동기 프로그래밍을 참조하십시오.
Task 클래스에는 기본 TaskFactory를 나타내는 정적 속성이 있습니다. 일반적으로 TaskFactory 메서드는 다음 예제와 같이 Factory 속성을 사용하여 호출됩니다.
[Visual Basic]
Dim taskA as Task = Task.Factory.StartNew(Sub( ...))
[C#]
Task taskA = Task.Factory.StartNew( () => ...);
대부분의 시나리오에서는 새 클래스를 TaskFactory에서 파생시킬 필요가 없습니다. 그러나 새 TaskFactory를 구성한 다음 이를 사용하여 특정 옵션을 지정하거나 작업을 사용자 지정 스케줄러와 연결하는 것이 유용한 경우도 있습니다. 다음 예제에서는 지정된 TaskScheduler를 사용하고 지정된 TaskCreationOptions 옵션이 있는 작업을 만드는 새 TaskFactory의 구성 방법을 보여 줍니다.
Class Program
Shared Sub Main()
Dim cts As CancellationTokenSource = New CancellationTokenSource()
Dim _factory As TaskFactory = New TaskFactory(
cts.Token,
TaskCreationOptions.PreferFairness,
TaskContinuationOptions.ExecuteSynchronously,
New MyScheduler())
Dim t2 = _factory.StartNew(Sub() DoWork())
End Sub
Shared Sub DoWork()
' ...
End Sub
class Program
{
static CancellationTokenSource cts = new CancellationTokenSource();
private static TaskFactory _factory = new TaskFactory(
cts.Token,
TaskCreationOptions.PreferFairness,
TaskContinuationOptions.ExecuteSynchronously,
new MyScheduler());
static void Main(string[] args)
{
var t2 = _factory.StartNew(() => DoWork());
}
static void DoWork() {/*...*/ }
}