Я ищу объяснение того, почему .NET CancellationToken
struct была введена в дополнение к 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
, и для каждого токена проверка отмены является доступом к локальному полю?
Учитывая, что в обоих случаях достаточно volatile bool без блокировки, я все еще не понимаю, почему это будет быстрее.
Спасибо!