Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Constructor Task (Action, CancellationToken)

 

Publicado: octubre de 2016

Inicializa una nueva instancia de Task con la acción especificada y CancellationToken.

Espacio de nombres:   System.Threading.Tasks
Ensamblado:  mscorlib (en mscorlib.dll)

public Task(
	Action action,
	CancellationToken cancellationToken
)

Parámetros

action
Type: System.Action

Delegado que representa el código que se va a ejecutar en la tarea.

cancellationToken
Type: System.Threading.CancellationToken

El CancellationToken que observará la nueva tarea.

Exception Condition
ObjectDisposedException

Ya se eliminó el CancellationToken proporcionado.

ArgumentNullException

El argumento action es null.

En lugar de llamar a este constructor, la manera más común para crear instancias de un Task objeto e inicie una tarea que se está llamando a estático Task.Run(Action, CancellationToken) y TaskFactory.StartNew(Action, CancellationToken) métodos. La única ventaja que ofrece este constructor es que permite la creación de instancias de objeto se separa de la invocación de la tarea.

Para obtener más información, consulte paralelismo de tareas (Task Parallel Library) y cancelación en subprocesos administrados.

El ejemplo siguiente se llama el Task(Action, CancellationToken) constructor para crear una tarea que recorre en iteración los archivos en el directorio C:\Windows\System32. La expresión lambda llama el Parallel.ForEach<TSource> para agregar información acerca de cada archivo a un List<T> objeto. Cada uno separado tarea anidada que se invoca el Parallel.ForEach<TSource> bucle comprueba el estado del token de cancelación y, si se solicita la cancelación, llama a la CancellationToken.ThrowIfCancellationRequested (método). El CancellationToken.ThrowIfCancellationRequested método produce un OperationCanceledException excepción que se controla en un catch bloquear cuando el subproceso que realiza la llamada llama la Task.Wait (método). El Start a continuación, se llama el método para iniciar la tarea.

using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      var tokenSource = new CancellationTokenSource();
      var token = tokenSource.Token;
      var files = new List<Tuple<string, string, long, DateTime>>();

      var t = new Task(() => { string dir = "C:\\Windows\\System32\\";
                               object obj = new Object();
                               if (Directory.Exists(dir)) {
                                  Parallel.ForEach(Directory.GetFiles(dir),
                                  f => {
                                          if (token.IsCancellationRequested)
                                             token.ThrowIfCancellationRequested();
                                          var fi = new FileInfo(f);
                                          lock(obj) {
                                             files.Add(Tuple.Create(fi.Name, fi.DirectoryName, fi.Length, fi.LastWriteTimeUtc));          
                                          }
                                     });
                                }
                              } , token);
      t.Start();
      tokenSource.Cancel();
      try {
         t.Wait(); 
         Console.WriteLine("Retrieved information for {0} files.", files.Count);
      }
      catch (AggregateException e) {
         Console.WriteLine("Exception messages:");
         foreach (var ie in e.InnerExceptions)
            Console.WriteLine("   {0}: {1}", ie.GetType().Name, ie.Message);

         Console.WriteLine("\nTask status: {0}", t.Status);       
      }
      finally {
         tokenSource.Dispose();
      }
   }
}
// The example displays the following output:
//       Exception messages:
//          TaskCanceledException: A task was canceled.
//       
//       Task status: Canceled

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 4.0
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 5.0
Windows Phone Silverlight
Disponible desde 8.0
Windows Phone
Disponible desde 8.1
Volver al principio
Mostrar: