Szukam uzasadnienia, dlaczego CancellationTokenstruktura .NET została wprowadzona jako dodatek do CancellationTokenSourceklasy. Rozumiem, jak należy używać interfejsu API, ale chcę również zrozumieć, dlaczego jest tak zaprojektowany.
To znaczy, dlaczego mamy:
var cts = new CancellationTokenSource();
SomeCancellableOperation(cts.Token);
...
public void SomeCancellableOperation(CancellationToken token) {
...
token.ThrowIfCancellationRequested();
...
}
zamiast bezpośredniego przekazywania, CancellationTokenSourcejak:
var cts = new CancellationTokenSource();
SomeCancellableOperation(cts);
...
public void SomeCancellableOperation(CancellationTokenSource cts) {
...
cts.ThrowIfCancellationRequested();
...
}
Czy jest to optymalizacja wydajności oparta na fakcie, że sprawdzanie stanu anulowania odbywa się częściej niż przekazywanie tokenu?
Więc to CancellationTokenSourcemoże śledzić i aktualizować CancellationTokens, a dla każdego tokena kontrola anulowania jest lokalnym dostępem do pola?
Biorąc pod uwagę, że zmienny bool bez blokowania jest wystarczający w obu przypadkach, nadal nie rozumiem, dlaczego miałoby to być szybsze.
Dzięki!

