WPF CancellationTokenSource не работает

1

Я использую этот код для выполнения задач синхронно

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 Но задача продолжает работать, и даже следующая начинается...

что мне не хватает?

благодарю!

  • 0
    это должно быть отличное чтение ... johnbadams.wordpress.com/2012/03/10/…
  • 0
    Отмена задачи имеет кооперативную модель, в которой задача должна активно участвовать в процессе отмены. Задача должна проверить токен и прервать выполнение, когда это безопасно.
Показать ещё 1 комментарий
Теги:
wpf
task

1 ответ

2

Из документации для CancellationToken.IsCancellationRequested:

Если это свойство верно, то это гарантирует только то, что отмена была запрошена. Это не гарантирует, что каждый зарегистрированный обработчик завершил выполнение, и что запросы на отмену не закончили распространение для всех зарегистрированных обработчиков. Может потребоваться дополнительная синхронизация, особенно в ситуациях, когда связанные объекты одновременно отменяются.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню