Szukam uzasadnienia, dlaczego CancellationToken
struktura .NET została wprowadzona jako dodatek do CancellationTokenSource
klasy. 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, CancellationTokenSource
jak:
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 CancellationTokenSource
moż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!