Dlaczego CancellationToken jest oddzielony od CancellationTokenSource?

Szukam uzasadnienia, dlaczego struktura .NET CancellationToken została wprowadzona jako dodatek do klasy CancellationTokenSource. rozumiemw jaki sposób API ma być używane, ale chce również zrozumiećczemu jest tak zaprojektowany.

To znaczy, dlaczego mamy:

var cts = new CancellationTokenSource();
SomeCancellableOperation(cts.Token);

...
public void SomeCancellableOperation(CancellationToken token) {
    ...
    token.ThrowIfCancellationRequested();
    ...
}

zamiast bezpośrednio przekazywać CancellationTokenSource dookoła:

var cts = new CancellationTokenSource();
SomeCancellableOperation(cts);

...
public void SomeCancellableOperation(CancellationTokenSource cts) {
    ...
    cts.ThrowIfCancellationRequested();
    ...
}

Czy jest to optymalizacja wydajności oparta na fakcie, że kontrole stanu anulowania zdarzają się częściej niż przekazywanie tokena?

Aby CancellationTokenSource mógł śledzić i aktualizować CancellationTokens, a dla każdego tokena kontrola anulowania jest dostępem do lokalnego pola?

Biorąc pod uwagę, że lotny bool bez blokowania jest wystarczający w obu przypadkach, nadal nie widzę powodu, dla którego byłoby to szybsze.

Dzięki!

questionAnswers(6)

yourAnswerToTheQuestion