Compartir a través de


Generadores de tareas

Un generador de tareas se representa mediante la clase System.Threading.Tasks.TaskFactory, que crea objetos Task, o la clase System.Threading.Tasks.TaskFactory<TResult>, que crea objetos Task<TResult>. Ambas clases contienen métodos que puede utilizar para:

La clase Task tiene una propiedad estática que representa TaskFactory predeterminada. Normalmente, los métodos TaskFactory se invocan utilizando la propiedad Factory, como se muestra en el siguiente ejemplo.

[Visual Basic]

Dim taskA as Task = Task.Factory.StartNew(Sub( ...))

[C#]

Task taskA = Task.Factory.StartNew( () => ...);

En la mayoría de los casos, no tiene que derivar una nueva clase de TaskFactory. Sin embargo, a veces es útil configurar una nueva TaskFactory y utilizarla para especificar algunas opciones o asociar tareas a un programador personalizado. En el siguiente ejemplo se muestra cómo configurar una nueva TaskFactory que crea tareas que usan el TaskScheduler especificado y tiene las opciones TaskCreationOptions especificadas.

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

Vea también

Conceptos

Programación paralela en .NET Framework