Я шукаю обґрунтування того, чому .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
, і для кожного маркера перевірка скасування - це локальний доступ до поля?
Зважаючи на те, що мінливий булінг без блокування в обох випадках, я все ще не можу зрозуміти, чому це було б швидше.
Дякую!