Sto cercando una logica del perché .NET CancellationTokenstruct è stato introdotto oltre alla CancellationTokenSourceclasse. 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 CancellationTokenSourcegiro 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 CancellationTokenSourcepossa 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!

