Estoy buscando una razón de por qué CancellationToken
se introdujo .NET struct además de la CancellationTokenSource
clase. 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 CancellationTokenSource
como:
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, ¿ CancellationTokenSource
puede 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!