Я ищу обоснование того, почему .NET CancellationToken была введена в дополнение к классу CancellationTokenSource. Я понимаю, как использовать API, но хочу также понять, почему он разработан таким образом.
I.e., почему мы имеем:
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 без блокировки, я все еще не понимаю, почему это было бы быстрее.
Спасибо!