Почему CancellationToken отличается от CancellationTokenSource?

Я ищу объяснение того, почему структура .NET CancellationToken была введена в дополнение к классу CancellationTokenSource. я понимаюкак API должен быть использован, но хочу также понятьЗачем это разработано таким образом.

Т.е. почему мы имеем:

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

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

вместо прямой передачи CancellationTokenSource, например:

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

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

Это оптимизация производительности, основанная на том факте, что проверки состояния отмены происходят чаще, чем передача токена?

Так что CancellationTokenSource может отслеживать и обновлять CancellationTokens, и для каждого токена проверка отмены является локальным полем доступа?

Учитывая, что в обоих случаях достаточно изменчивого bool без блокировки, я все еще могуне понимаю, почему это будет быстрее.

Спасибо!

Ответы на вопрос(6)

Ваш ответ на вопрос