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

