Továrny úloh
Továrna úloh je reprezentována System.Threading.Tasks.TaskFactory třídou, která vytváří Task objekty, nebo System.Threading.Tasks.TaskFactory<TResult> třídou, která vytváří Task<TResult> objekty. Obě třídy obsahují metody, které mohou být použity pro:
Vytvořte úlohy a okamžitě je spusťte. Další informace naleznete v tématu Funkční paralelismus (Task Parallel Library).
Vytvořte úlohu pokračování, která se spustí, když je ukončen jeden nebo všechny úkoly z pole úkolů. Další informace naleznete v tématu Pokračující úlohy.
Vytvoříte úlohu, která představuje dvojici metod begin/end a které dodržují Asynchronní model programování. Další informace naleznete v tématu TPL a tradiční asynchronní programování v .NET.
Třída Task obsahuje statickou vlastnost, která představuje ve výchozím nastavení TaskFactory. Obvykle jsou metody TaskFactory vyvolány pomocí Factory vlastnosti, jak je znázorněno v následujícím příkladu.
Visual Basic
Dim taskA as Task = Task.Factory.StartNew(Sub( ...))
[C#]
Task taskA = Task.Factory.StartNew( () => ...);
Ve většině případů není nutné odvozovat novou třídu z TaskFactory. Je však někdy užitečné nakonfigurovat nový TaskFactory a použít jej k zadání určité možnosti nebo k přidružení úlohy s vlastním plánovačem. Následující příklad ukazuje, jak nakonfigurovat novou TaskFactory , která vyváří úlohy, které všechny používají daný TaskScheduler a mají daný parametr TaskCreationOptions.
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() {/*...*/ }
}