отмена Cancel() в cancellationTokenSource
У меня есть cancellationTokenSource, который я использую повторно в сервисе плеера. При остановке плеера я вызываю cancellationTokenSource.Cancel();, но мне так же надо потом заново запустить плеер с нормальным значением cancellationToken, как это сделать? В нынешней ситуации я вызываю Cancel(), но дальше не могу вернуть token в обычное состояние
Ответы (1 шт):
CancellationTokenSource невозможно вернуть назад в состояние «отмены нет».
Почему так сделали? Дело в том, что значение IsCancellationRequested в CancellationToken может быть считано позже, возможно, в другом потоке, и если бы было возможно отменить отмену, то наш код не понимал бы, отмена реально состоялась, или нет. Состояние «отмена реально была» нам приходилось бы хранить отдельно, а значению IsCancellationRequested нельзя было бы доверять.
Чтобы этого всего не было, было решено, что CancellationTokenSource и связанные с ним токены могут менять состояние только в одну сторону.
Просто создавайте каждый раз новый CancellationTokenSource, не используйте старый повторно.