Здравствуйте, ·, Вы писали:
S>> ·>Неясно какое отношение это имеет к асинхронщине или многопоточке. Это ортогональные вещи.
S>> Прямое! Вот куча примеров https://metanit.com/sharp/tutorial/12.5.php
S>> https://learn.microsoft.com/ru-ru/dotnet/standard/threading/cancellation-in-managed-threads
·>И? Это ортогональные вещи. Ровно этот же CancellationToken используется так же и в синхронном коде.
·>В асинхронном, как я понял, оно кидает исключение, которое ловится в результат таска. В синхронном то же исключение вываливается напрямую.
·>Неясно зачем для этого было создавать какой-то специальный API. Наверно, просто для универсальности.
Не обязательно.
Если ты читал есть
cts.Cancel(); if (token.IsCancellationRequested)
То есть ты должен либо опрашивать, если IsCancellationRequested == true
вызвать ThrowIfCancellationRequested
if (token.IsCancellationRequested)
throw new OperationCanceledException(token);
https://learn.microsoft.com/ru-ru/dotnet/api/system.threading.cancellationtoken.throwifcancellationrequested?view=net-8.0
То есть нужно с некоторой периодичностью опрашивать token
https://learn.microsoft.com/ru-ru/dotnet/standard/threading/cancellation-in-managed-threads
Просто его можно пробросить в кучу задач в качестве параметра и отменить эти задачи. Вот простой смысл