Sto cercando una logica del perché .NET CancellationToken
struct è stato introdotto oltre alla CancellationTokenSource
classe. Capisco come utilizzare l'API, ma voglio anche capire perché è stato progettato in questo modo.
Cioè, perché abbiamo:
var cts = new CancellationTokenSource();
SomeCancellableOperation(cts.Token);
...
public void SomeCancellableOperation(CancellationToken token) {
...
token.ThrowIfCancellationRequested();
...
}
invece di passare direttamente in CancellationTokenSource
giro come:
var cts = new CancellationTokenSource();
SomeCancellableOperation(cts);
...
public void SomeCancellableOperation(CancellationTokenSource cts) {
...
cts.ThrowIfCancellationRequested();
...
}
Si tratta di un'ottimizzazione delle prestazioni basata sul fatto che i controlli dello stato di annullamento si verificano più frequentemente rispetto al passaggio del token?
In modo che CancellationTokenSource
possa tenere traccia e aggiornareCancellationTokens
e per ogni token il controllo di annullamento è un accesso sul campo locale?
Dato che un bool volatile senza blocco è sufficiente in entrambi i casi, non riesco ancora a capire perché sarebbe più veloce.
Grazie!