Si creo una instancia de CancellationToken, ¿hay alguna forma de cambiar de alguna manera la propiedad IsCancellationRequested o siempre necesito una instancia de CancellationTokenSource y su método Cancel para eso? En otras palabras, para la cancelación correcta de tareas, ¿tiene sentido usar new CancellationToken () o deberíamos usar siempre CancellationTokenSource.Token?

Y si siempre necesito usar CancellationTokenSource.Token, ¿en qué situaciones podría necesitar crear una instancia de CancellationToken por separado? ¿Por qué debería hacer un nuevo CancellationToken ()? ¿Cuándo puedo simplemente hacer CancellationToken = CancellationTokenSource.Token?

0
user17493770 24 nov. 2021 a las 05:49
Eche un vistazo a esto: stackoverflow.com/ preguntas / 14215784 /… Muchas respuestas sobre la diferencia de estos dos, incluida una de alguien que participó en el diseño de estas clases.
 – 
Codehack
24 nov. 2021 a las 06:14
 – 
Codehack
24 nov. 2021 a las 06:17
No, no se dice por qué el token puede existir por separado de CancellationTokenSource. Hay frases generales. Pero no hay detalles. Dé un ejemplo en el que un token sea útil además de CancellationTokenSource. Y sí, un token no es una clase sino una estructura. ¿Por qué debería hacer un nuevo CancellationToken ()? ¿Cuándo puedo simplemente hacer CancellationToken = CancellationTokenSource.Token?
 – 
NikVladi
24 nov. 2021 a las 06:32

1 respuesta

La mejor respuesta

new CancellationToken() - o equivalentemente CancellationToken.None produce un token de cancelación que nunca será cancelado.

Es útil cuando llama a un método que espera un CancellationToken, pero su código nunca tiene la intención de cancelar la tarea.

1
Klaus Gütter 24 nov. 2021 a las 07:14
¡Gracias! En otras palabras, el valor de la propiedad IsCancellationRequested no se puede cambiar en new CancellationToken (). Y se puede usar new CancellationToken () donde se debe pasar un CancellationToken, pero no se asume que estemos planeando cancelar nuestra operación en absoluto. ¿Entendí correctamente?
 – 
NikVladi
24 nov. 2021 a las 07:33
De hecho, IsCancellationRequested es una propiedad de solo obtención. Si lo desea, puede consultar la fuente código
 – 
Klaus Gütter
24 nov. 2021 a las 08:07