Я использую этот код для выполнения задач синхронно
var result = new StringBuilder();
//cts is a CancellationTokenSource();
foreach (var test in Tests)
{
var t1 = new Task<string>(t => test.Run(), cts.Token);
t1.Strat();
result.Append(t1.Result);
}
Я вызываю cts.Cancel()
из другого потока, и я вижу, что токен обновлен: cts.Token.IsCancellationRequested == true
Но задача продолжает работать, и даже следующая начинается...
что мне не хватает?
благодарю!
Из документации для CancellationToken.IsCancellationRequested
:
Если это свойство верно, то это гарантирует только то, что отмена была запрошена. Это не гарантирует, что каждый зарегистрированный обработчик завершил выполнение, и что запросы на отмену не закончили распространение для всех зарегистрированных обработчиков. Может потребоваться дополнительная синхронизация, особенно в ситуациях, когда связанные объекты одновременно отменяются.