Имеется привычная ситуация: UI, в котором пользователь бездумно жмакает кнопочки, которые в свою очередь запускают асинхронные/параллельные задачи. Это может быть как и GUI, так и сайт, посылающий запросы серверу.
А теперь начинается интересное:
- Любое действие должно быть отменяемым (не убивание потока, а штатное завершение). Большинство async кода что я видел, не поддерживает такую простую фичу. Видимо вебсерверам это не интересно. Даже в Go, с его горутинами, это достигается велосипедами, а не средствами языка.
- Любое действие может быть продолжено. Это немного похоже на предыдущую задачу, но с тем нюансом, что у нас задача представляет собой не
loop {}
, а цепочку действий. - Задача может общаться с родителем. Запрашивать новые данные, подтверждать действия.
- Задача может использовать глобальный контекст. То есть живёт не сама по себе.
- Задача может запускать свои асинхронные задачи и на неё распространяются те же требования, что и выше.
- Это не должно превратиться в callback hell.
Язык роли не играет. Производительность тоже. Интересует сам алгоритм.