Eugene-Usachev
@Eugene-Usachev

Для чего нужна отмена задач, кроме таймаутов и каналов?

Закрываю долги по своему асинхронному движку. Многие асинхронные движки позволяют отменять задачи. Я долго не вводил этот функционал, так как были более важные части функционала. Сейчас начал писать отмену, но столкнулся с проблемой: я не могу написать документацию к этому функционалу!

Мой движок умеет контролировать таймауты io задач почти бесплатно, поэтому даже самая дешёвая реализация отмены обходиться немного, но дороже. Я так и написал в документации, мол используйте {io_operation_name}_with_deadline вместо {io_operation_name}_with_cancel для отмены задач по дедлайну, потому что так эффективнее. Дальше мне надо написать корректный пример, но мне не хватает фантазии для этого.

Для каналов реализован метод close, так что их в пример привести нельзя. Для чего Вы используете отмену задач?
  • Вопрос задан
  • 81 просмотр
Решения вопроса 2
@mvv-rus
Настоящий админ AD и ненастоящий программист
Отмены задач используются, как ни странно, для отмены задач. А чтобы отменить задачу, это должно быть кому-нидуь нужно. Например, этим "кем-нибудь" часто бывает пользователь, которому результат задачи перестал быть нужным.

В качестве примера: пользователь послал на сервер через веб-страницу запрос и ждет результата. Представим, что запрос - сложный, результат так сразу не получить, запрос выполняется, а пользователь ждет, потому что всё это понимает. Потом пользователю внезапно надоедает ждать и он посылает команду Отменить. Или - закрывает страницу. Так вот, по-хорошему, в этом случае надо отменить задачу, которая выполняет запрос, чтобы она не тратила впустую ресурсы сервера.

А ещё отмена полезна для прерывания процессов потенциально бесконечных, типа смотреть, как горит огонь, как течет вода, как люди работают... :-)

Таймауты тут не помогут в обоих случаях. В первом случае пользователь сам часто не знает, сколько он согласен ждать, а во втором - вообще нет никакого таймаута, ибо процесс бесконечен.
Ответ написан
Комментировать
В дополнение к предыдущему - случай с graceful shutdown, когда у тебя есть какой-то долгий процесс и в случае его завершения в середине нужно какие-то особые телодвижения совершить (сохранить результат куда нибудь в файлы, дождаться закрытия соединения итд.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы