Pregunta

Ciertos constructores System.Threading.Tasks.Task tomar un CancellationToken como un parámetro:

CancellationTokenSource source = new CancellationTokenSource();
Task t = new Task (/* method */, source.Token);

Lo que me desconcierta de esto es que no hay manera de dentro de el cuerpo del método que trajeran a la ficha aprobada en (por ejemplo, nada como Task.CurrentTask.CancellationToken). El token se deberá suministrar a través de algún otro mecanismo, como el objeto de estado o capturado en una lambda.

Entonces, ¿qué propósito tiene que proporciona la cancelación de ficha en el constructor servir?

¿Fue útil?

Solución

La superación de esta ficha en la tarea de constructor se asocia con esta tarea.

la respuesta de Stephen Toub de MSDN :

Esto tiene dos ventajas principales:

  1. Si el token ha solicitado la cancelación antes de la tarea de comenzar la ejecución, la tarea no se ejecutará. En lugar de la transición a Running, que va a pase inmediatamente a Canceled. Esto evita la gastos de funcionamiento de la tarea si sólo sería cancelado, mientras que en ejecución de todos modos.
  2. Si el cuerpo de la tarea también está supervisando la cancelación de token y lanza una OperationCanceledException que contiene esa señal (Que es lo que hace ThrowIfCancellationRequested), a continuación, cuando la tarea ve que OperationCanceledException, comprueba si coincidencias simbólicas de la OperationCanceledException del Grupo de simbólico. Si lo hace, esa excepción es vista como un reconocimiento de cancelación cooperativa y las transiciones tarea al Cancelado estado (en lugar del estado de fallo).
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top