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:
Crear tareas e iniciarlas inmediatamente. Para obtener más información, vea Paralelismo de tareas (Task Parallel Library).
Crear continuaciones de tareas que se inicien cuando alguna o toda una matriz de tareas se complete. Para obtener más información, vea Tareas de continuación.
Crear tareas que representen pares de métodos de comienzo/fin que siguen el Modelo de programación asincrónica. Para obtener más información, vea TPL y la programación asincrónica tradicional de .NET.
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() {/*...*/ }
}