Estoy buscando una razón de por qué CancellationTokense introdujo .NET struct además de la CancellationTokenSourceclase. Entiendo cómo se utilizará la API, pero también quiero entender por qué está diseñada de esa manera.
Es decir, ¿por qué tenemos:
var cts = new CancellationTokenSource();
SomeCancellableOperation(cts.Token);
...
public void SomeCancellableOperation(CancellationToken token) {
...
token.ThrowIfCancellationRequested();
...
}
en lugar de pasar directamente CancellationTokenSourcecomo:
var cts = new CancellationTokenSource();
SomeCancellableOperation(cts);
...
public void SomeCancellableOperation(CancellationTokenSource cts) {
...
cts.ThrowIfCancellationRequested();
...
}
¿Es esta una optimización del rendimiento basada en el hecho de que las verificaciones del estado de cancelación ocurren con más frecuencia que pasar el token?
Entonces, ¿ CancellationTokenSourcepuede realizar un seguimiento y actualizar CancellationTokens, y para cada token la verificación de cancelación es un acceso de campo local?
Dado que un bool volátil sin bloqueo es suficiente en ambos casos, todavía no puedo ver por qué eso sería más rápido.
¡Gracias!

