Я довольно новичок в модели актера, поэтому я думаю, что уже существуют устоявшиеся шаблоны, обращающиеся к моему обычному сценарию с такими прекрасными составными абстракциями, как актеры и фьючерсы.
У меня есть асинхронные операции со следующими требованиями:
- Они используют устаревшую систему, отправляя низкоуровневый запрос и затем отслеживая состояние объекта с помощью опроса. Таким образом, результат фактической операции доступен только с отложенным способом, запрашивающие должны быть уведомлены, когда наблюдаемое состояние достигает желаемого состояния.
- Эти операции могут быть выполнены только после завершения некоторых других операций, которые они должны ожидать параллельно.
- Операции можно отменить. Конечно, уже выполненные запросы низкого уровня не могут быть отменены; отмена означает, что не выдает фактическую операцию после операций, от которых мы зависим, и, конечно, она должна распространяться рекурсивно (если мы ожидаем зависимости и у нее есть несколько ожидающих операций, не выдают их).
Я думаю о Фьючерсах: первое требование может быть решено, например, с помощью map
/ flatMap
от Akka, второй с комбинатором traverse
без процедурного поддержания зависимостей / иждивенцев. Но я не могу придумать решение для отмены ; фьючерсы не могут быть отменены, и если они составлены, их компоненты недоступны. Как инкапсулировать «отменить операцию current » функциональным способом? Поддерживает ли это какая-либо из сред Actor для Scala?