Fábricas de tarefa
Uma fábrica de tarefa é representada pela System.Threading.Tasks.TaskFactory classe, que cria Task objetos, ou o System.Threading.Tasks.TaskFactory<TResult> classe, que cria Task<TResult> objetos. Ambas as classes que contêm métodos que você pode usar para:
Criar tarefas e iniciá-los imediatamente. Para obter mais informações, consulte Paralelismo de tarefas (biblioteca paralela de tarefas).
Crie a continuação da tarefa que iniciam quando concluir a qualquer ou todos de uma matriz de tarefas. Para obter mais informações, consulte Tarefas de continuação.
Crie tarefas que representam os pares de métodos begin/end que seguem o modelo de programação assíncrona. Para obter mais informações, consulte A TPL e tradicionais.NET programação assíncrona.
O Task classe tem uma propriedade estática que representa o padrão TaskFactory. Normalmente, TaskFactory métodos são invocados usando o Factory a propriedade, conforme mostrado no exemplo a seguir.
[Visual Basic]
Dim taskA as Task = Task.Factory.StartNew(Sub( ...))
[C#]
Task taskA = Task.Factory.StartNew( () => ...);
Na maioria dos cenários, você não tem que derivar uma nova classe de TaskFactory. No entanto, às vezes é útil configurar uma nova TaskFactory e usá-lo para especificar determinadas opções ou associar tarefas com um Agendador personalizado. O exemplo a seguir mostra como configurar uma nova TaskFactory que cria tarefas todos usam especificado TaskScheduler e tenha especificado TaskCreationOptions Opções.
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() {/*...*/ }
}