Fabriques de tâches
Une fabrique de tâches est représentée par la classe System.Threading.Tasks.TaskFactory, qui crée des objets Task ou la classe System.Threading.Tasks.TaskFactory<TResult>, qui crée des objets Task<TResult>. Les deux classes contiennent des méthodes que vous pouvez utiliser pour :
créer des tâches et les démarrer immédiatement. Pour plus d'informations, consultez Parallélisme des tâches (bibliothèque parallèle de tâches) ;
créer des continuations de tâches qui démarrent lorsque certaines ou toutes les tâches sont terminées. Pour plus d'informations, consultez Tâches de continuation ;
créer des tâches qui représentent des paires de méthodes de début/fin qui suivent le modèle de programmation asynchrone. Pour plus d'informations, consultez Bibliothèque parallèle de tâches et programmation asynchrone .NET traditionnelle.
La classe Task est dotée d'une propriété statique qui représente le TaskFactory par défaut. En général, les méthodes TaskFactory sont appelées à l'aide de la propriété Factory, comme indiqué dans l'exemple suivant.
[Visual Basic]
Dim taskA as Task = Task.Factory.StartNew(Sub( ...))
[C#]
Task taskA = Task.Factory.StartNew( () => ...);
Dans la plupart des scénarios, vous ne devez pas dériver une nouvelle classe de TaskFactory. Toutefois, il peut s'avérer utile de configurer une nouvelle TaskFactory, puis de l'utiliser pour spécifier certaines options ou associer des tâches à un planificateur personnalisé. L'exemple suivant indique comment configurer une nouvelle TaskFactory qui crée des tâches utilisant toutes le TaskScheduler spécifié et disposant des options TaskCreationOptions spécifié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() {/*...*/ }
}