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

对于受过scala教育的人来说,这可能是个简单的问题,但我还是个初学者;)

我有一个基本参与者,他将任务分派给多个工作参与者,并通过!?将其结果回复到阻止外部调用

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]]
,这样您就可以了解是否出了问题,您的员工参与者没有及时完成任务

,如果他们没有按时完成任务,您如何阻止他们?