CancellationTokenSource Clase
TOC
Collapse the table of content
Expand the table of content
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

CancellationTokenSource (Clase)

 

Señala un objeto CancellationToken que debe cancelarse.

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

System.Object
  System.Threading.CancellationTokenSource

[ComVisibleAttribute(false)]
[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, 
	ExternalThreading = true)]
public class CancellationTokenSource : IDisposable

NombreDescripción
System_CAPS_pubmethodCancellationTokenSource()

Inicializa una nueva instancia de la clase CancellationTokenSource.

System_CAPS_pubmethodCancellationTokenSource(Int32)

Inicializa una nueva instancia de la clase CancellationTokenSource que se cancela después del retraso especificado en milisegundos.

System_CAPS_pubmethodCancellationTokenSource(TimeSpan)

Inicializa una nueva instancia de la clase CancellationTokenSource que se cancela después del intervalo de tiempo especificado.

NombreDescripción
System_CAPS_pubpropertyIsCancellationRequested

Obtiene si se solicitó la cancelación de este CancellationTokenSource.

System_CAPS_pubpropertyToken

Obtiene el objeto CancellationToken asociado a CancellationTokenSource.

NombreDescripción
System_CAPS_pubmethodCancel()

Comunica una solicitud de cancelación.

System_CAPS_pubmethodCancel(Boolean)

Comunica una solicitud de cancelación y especifica si se deben procesar las devoluciones de llamada restantes y las operaciones cancelables.

System_CAPS_pubmethodCancelAfter(Int32)

Programa una operación de cancelación en este CancellationTokenSource después del número especificado de milisegundos.

System_CAPS_pubmethodCancelAfter(TimeSpan)

Programa una operación de cancelación en este CancellationTokenSource después del intervalo de tiempo especificado.

System_CAPS_pubmethodSystem_CAPS_staticCreateLinkedTokenSource(CancellationToken, CancellationToken)

Crea un CancellationTokenSource que tendrá el estado cancelado cuando alguno de los tokens de origen tenga el estado cancelado.

System_CAPS_pubmethodSystem_CAPS_staticCreateLinkedTokenSource(CancellationToken[])

Crea un CancellationTokenSource que tendrá el estado cancelado cuando alguno de los tokens de origen del la matriz especificada tenga el estado cancelado.

System_CAPS_pubmethodDispose()

Libera todos los recursos usados por la instancia actual de la clase CancellationTokenSource.

System_CAPS_protmethodDispose(Boolean)

Libera los recursos no administrados usados que usa la clase CancellationTokenSource y, de forma opcional, libera los recursos administrados.

System_CAPS_pubmethodEquals(Object)

Determina si el objeto especificado es igual al objeto actual.(Heredado de Object.)

System_CAPS_protmethodFinalize()

Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por el recolector de basura. (Heredado de Object.)

System_CAPS_pubmethodGetHashCode()

Sirve como la función hash predeterminada.(Heredado de Object.)

System_CAPS_pubmethodGetType()

Obtiene el Type de la instancia actual.(Heredado de Object.)

System_CAPS_protmethodMemberwiseClone()

Crea una copia superficial del Object actual.(Heredado de Object.)

System_CAPS_pubmethodToString()

Retorna una cadena que representa al objeto actual. (Heredado de Object.)

A partir de la .NET Framework 4, .NET Framework utiliza un modelo unificado para la cancelación cooperativa de operaciones asincrónicas o de larga ejecución sincrónicas que implica dos objetos:

  • Un CancellationTokenSource object, que proporciona un token de cancelación a través de su Token propiedad y envía un mensaje de cancelación al llamar a su Cancel o CancelAfter (método).

  • Un CancellationToken objeto, que indica si se solicita la cancelación.

El patrón general para implementar el modelo de cancelación cooperativa es:

  • Crear una instancia de un objeto CancellationTokenSource, que administra y envía una notificación de cancelación a los tokens de cancelación individuales.

  • Pasar el token devuelto por la propiedad CancellationTokenSource.Token para cada tarea o el subproceso que realiza escuchas de cancelación.

  • Llame a la CancellationToken.IsCancellationRequested método de operaciones que recibe el token de cancelación. Proporcionan un mecanismo para cada tarea o subproceso responda a una solicitud de cancelación. Si decide cancelar una operación y exactamente cómo debe hacerlo, depende de la lógica de aplicación.

  • Llamar al método CancellationTokenSource.Cancel para proporcionar una notificación de cancelación. Esto establece el CancellationToken.IsCancellationRequested propiedad en cada copia del token de cancelación para true.

  • Llame a la Dispose método cuando haya terminado con la CancellationTokenSource objeto.

Para obtener más información, consulta Cancellation in Managed Threads.

System_CAPS_importantImportante

Este tipo implementa la IDisposable interfaz. Cuando haya terminado de utilizar una instancia del tipo, debería eliminar, directa o indirectamente. Para deshacerse del tipo directamente, llame a su Dispose método en un try/catch bloque. Para deshacerse de él indirectamente, usar una construcción de lenguaje como using (en C#) o Using (en Visual Basic). Para obtener más información, consulte la sección "Uso de un objeto que implementa IDisposable" en el IDisposable tema de la interfaz.

En el ejemplo siguiente se utiliza un generador de números aleatorios para emular una aplicación de recopilación de datos que lee los 10 valores enteros de once instrumentos diferentes. Un valor de cero indica que la medida ha fallado para un instrumento, en cuyo caso se debe cancelar la operación y no Media general deben calcularse.

Para controlar la posible cancelación de la operación, el ejemplo crea una instancia de un CancellationTokenSource objeto que genera un token de cancelación que se pasa a un TaskFactory objeto. La TaskFactory objeto a su vez pasa el token de cancelación a cada una de las tareas se encarga de recopilar lecturas para un instrumento determinado. El TaskFactory.ContinueWhenAll<TAntecedentResult, TResult>(Task<TAntecedentResult>[], Func<Task<TAntecedentResult>[], TResult>, CancellationToken) se invoca para asegurarse de que la media se calcula después de que haya recopilado correctamente todas las lecturas. Si una tarea tiene no porque se ha cancelado la llamada a la TaskFactory.ContinueWhenAll<TAntecedentResult, TResult> método produce una excepción.

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

public class Example
{
   public static void Main()
   {
      // Define the cancellation token.
      CancellationTokenSource source = new CancellationTokenSource();
      CancellationToken token = source.Token;

      Random rnd = new Random();
      Object lockObj = new Object();

      List<Task<int[]>> tasks = new List<Task<int[]>>();
      TaskFactory factory = new TaskFactory(token);
      for (int taskCtr = 0; taskCtr <= 10; taskCtr++) {
         int iteration = taskCtr + 1;
         tasks.Add(factory.StartNew( () => {
                                       int value;
                                       int[] values = new int[10];
                                       for (int ctr = 1; ctr <= 10; ctr++) {
                                          lock (lockObj) {
                                             value = rnd.Next(0,101);
                                          }
                                          if (value == 0) { 
                                             source.Cancel();
                                             Console.WriteLine("Cancelling at task {0}", iteration);
                                             break;
                                          }   
                                          values[ctr-1] = value; 
                                       }
                                       return values;
                                    }, token));   

      }
      try {
         Task<double> fTask = factory.ContinueWhenAll(tasks.ToArray(), 
                                                      (results) => {
                                                         Console.WriteLine("Calculating overall mean...");
                                                         long sum = 0;
                                                         int n = 0; 
                                                         foreach (var t in results) {
                                                            foreach (var r in t.Result) {
                                                                  sum += r;
                                                                  n++;
                                                               }
                                                         }
                                                         return sum/(double) n;
                                                      } , token);
         Console.WriteLine("The mean is {0}.", fTask.Result);
      }   
      catch (AggregateException ae) {
         foreach (Exception e in ae.InnerExceptions) {
            if (e is TaskCanceledException)
               Console.WriteLine("Unable to compute mean: {0}", 
                                 ((TaskCanceledException) e).Message);
            else
               Console.WriteLine("Exception: " + e.GetType().Name);
         }
      }
      finally {
         source.Dispose();
      }
   }
}
// Repeated execution of the example produces output like the following:
//       Cancelling at task 5
//       Unable to compute mean: A task was canceled.
//       
//       Cancelling at task 10
//       Unable to compute mean: A task was canceled.
//       
//       Calculating overall mean...
//       The mean is 5.29545454545455.
//       
//       Cancelling at task 4
//       Unable to compute mean: A task was canceled.
//       
//       Cancelling at task 5
//       Unable to compute mean: A task was canceled.
//       
//       Cancelling at task 6
//       Unable to compute mean: A task was canceled.
//       
//       Calculating overall mean...
//       The mean is 4.97363636363636.
//       
//       Cancelling at task 4
//       Unable to compute mean: A task was canceled.
//       
//       Cancelling at task 5
//       Unable to compute mean: A task was canceled.
//       
//       Cancelling at task 4
//       Unable to compute mean: A task was canceled.
//       
//       Calculating overall mean...
//       The mean is 4.86545454545455.

Universal Windows Platform
Disponible desde 8
.NET Framework
Disponible desde 4.0
Portable Class Library
Compatible con: portable .NET platforms
Silverlight
Disponible desde 5.0
Windows Phone Silverlight
Disponible desde 8.0
Windows Phone
Disponible desde 8.1

Todos los miembros públicos y protegidos de CancellationTokenSource son seguros para subprocesos y se pueden usar simultáneamente desde varios subprocesos, con la excepción de Dispose, que sólo debe utilizarse cuando todas las operaciones en el CancellationTokenSource objeto se ha completado.

Volver al principio
Mostrar:
© 2016 Microsoft