отмена Cancel() в cancellationTokenSource

У меня есть cancellationTokenSource, который я использую повторно в сервисе плеера. При остановке плеера я вызываю cancellationTokenSource.Cancel();, но мне так же надо потом заново запустить плеер с нормальным значением cancellationToken, как это сделать? В нынешней ситуации я вызываю Cancel(), но дальше не могу вернуть token в обычное состояние


Ответы (1 шт):

Автор решения: VladD

CancellationTokenSource невозможно вернуть назад в состояние «отмены нет».

Почему так сделали? Дело в том, что значение IsCancellationRequested в CancellationToken может быть считано позже, возможно, в другом потоке, и если бы было возможно отменить отмену, то наш код не понимал бы, отмена реально состоялась, или нет. Состояние «отмена реально была» нам приходилось бы хранить отдельно, а значению IsCancellationRequested нельзя было бы доверять.

Чтобы этого всего не было, было решено, что CancellationTokenSource и связанные с ним токены могут менять состояние только в одну сторону.


Просто создавайте каждый раз новый CancellationTokenSource, не используйте старый повторно.

→ Ссылка