Scala 来自阻塞调用的多参与者调用
对于受过scala教育的人来说,这可能是个简单的问题,但我还是个初学者;) 我有一个基本参与者,他将任务分派给多个工作参与者,并通过!?将其结果回复到阻止外部调用Scala 来自阻塞调用的多参与者调用,scala,actor,Scala,Actor,对于受过scala教育的人来说,这可能是个简单的问题,但我还是个初学者;) 我有一个基本参与者,他将任务分派给多个工作参与者,并通过!?将其结果回复到阻止外部调用 a = new a a.start println(a !? "12345") class a extends Actor { def act = { loop { react { case msg => val result = wo
a = new a
a.start
println(a !? "12345")
class a extends Actor {
def act = {
loop {
react {
case msg =>
val result = worker_actor_1 !? msg
result += worker_actor_2 !? msg
result += worker_actor_3 !? msg
// So I just have multiple workers who should do stuff in parallel and the aggregated result should be returned to the calling function
reply(result)
}
现在我不知道如何真正并行化阻塞调用中的工作者角色,因为最后我必须回复()。调用实体不是参与者,只是一个普通类 您可以创建几个未来,然后生成一个单独的参与者来等待结果。因此,您的派遣将为新的请求做好准备。代码片段如下所示:
case msg =>
val invoker = sender
val flist =
worker_actor_1 !! task1 ::
worker_actor_2 !! task2 ::
worker_actor_3 !! task3 :: Nil
Scheduler.execute { invoker ! Futures.awaitAll(100, flist).map{ ..sum the results.. } }
请注意
awaitAll
返回List[Option[Any]]
,这样您就可以了解是否出了问题,您的员工参与者没有及时完成任务,如果他们没有按时完成任务,您如何阻止他们?