TaskFactory 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
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 |
이 작업 팩터리에 대한 기본 작업 스케줄러를 가져옵니다. |
메서드
적용 대상
스레드 보안
모든 공용 및 보호된 멤버 TaskFactory 는 스레드로부터 안전하며 여러 스레드에서 동시에 사용할 수 있습니다.