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 :

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() {/*...*/ }
}

Voir aussi

Concepts

Programmation parallèle dans le .NET Framework