我对Actor模型很陌生,这就是为什么我认为已经建立的模式可以解决我看似常见的场景,其中有如演员和未来这样漂亮的可组合抽象。
我有以下要求的异步操作:
我正在考虑期货:第一个要求可以用例如Akka的map
/ flatMap
,第二个与traverse
组合子没有在程序上维护依赖/依赖。但我想不出取消的解决方案;期货不能被取消,如果组成,它们的组件是不可达的。如何以功能方式封装“取消当前操作”? Scala的任何Actor框架都支持这个吗?
答案 0 :(得分:3)
创建一个使用Listeners的Actor将轮询状态传播给任何和所有侦听器。然后,您可以使用消息传递循环重新启动轮询。
class MyActor extends Actor with Listeners {
override def preStart {
self ! 'poll //Start looping on start
}
def receive = listenerManagement orElse {
case 'poll => val result = pollYourExternalDude()
gossip(result)
self ! 'poll //Loop
}
}
然后您可以使用停止或发送PoisonPill来停止演员。
这有帮助吗?
答案 1 :(得分:0)
Guava的ListenableFuture支持取消bound together时的某个级别(但不是combined from a collection时)。