Почему 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 без блокировки, я все еще могуне понимаю, почему это будет быстрее.
Спасибо!