Страницы

Поиск по вопросам

четверг, 19 декабря 2019 г.

CancellationToken для чего?

#c_sharp


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


Ответы

Ответ 1



CancellationToken передается как параметр и используется для оповещения кода о необходимости отмены операции. То есть вы создаете токен, передаете его в сторонний код, но если вам надо этот сторонний код оповестить, что вы хотите отменить операцию, вы для этого используете этот токен. Пример есть по первой ссылке в MSDN или вот ещё пример

Ответ 2



В качестве дополнения к правильному ответу @tym32167: В .NET принята кооперативная отмена операций. То есть, вы должны передать внутрь операции информацию о том, что вам более не нужен её результат, а уж операция должна позаботиться о том, чтобы правильно оборвать себя. Сама по себе отмена токена не вызывает обрыв операции. Обычно операция просматривает время от времени в удобных для этого точках выполнения, не требуется ли от неё отмена, и корректно завершает работу в случае необходимости. (Корректное завершение работы чаще всего выглядит снаружи как выброс исключения наподобие OperationCanceledException.) Оборвать операцию автоматически снаружи, без сотрудничества со стороны самой операции, довольно сложно. Дело в том, что при окончании работы операции ей, возможно, придётся подчистить за собой: удалить временные файлы, отмапить разделяемую память, исключить себя от списка текущих операций, закрыть открытые окна. Внешний код никак не может знать, что именно нужно операции для корректного завершения. Поэтому он и не пытается оборвать операцию. Известное исключение из этого правила — ASP.NET, который иногда убивает потоки по собственной инициативе.

Комментариев нет:

Отправить комментарий