这是我遇到的一个常见场景,我有两个(或更多)演员异步获取一些数据,然后我需要在他们全部完成后进行操作。
这样做的常见模式是什么?
这是一个简化的例子。
public MasterActor : ReceiveActor
{
public MasterActor()
{
Initialize();
}
public void Initiaize()
{
Receive<DoSomeWork>(_ =>
{
var actor1 = Context.ActorOf(Props.Create(() => new Actor1());
var actor2 = Context.ActorOf(Props.Create(() => new Actor2());
// pretend these actors send responses to their senders
// for sake of example each of these methods take between 1 and 3 seconds
actor1.Tell(new GetActor1Data());
actor2.Tell(new GetActor2Data());
});
Receive<Actor1Response>(m =>
{
//actor 1 has finished it's work
});
Receive<Actor2Response>(m =>
{
//actor 2 has finished it's work
});
}
}
为了开始这件事,我发送了MasterActor
一条DoSomeWork
消息。
当我同时拥有 aActor1Response
和 an时,进行操作的常用方法是什么Actor2Response
?
我真的不想在每个接收处理程序中都有逻辑检查另一个是否完成或类似的事情。我猜我在想什么类似于Task.WaitAll()
方法的东西。
我只是以错误的方式解决问题吗?我需要以不同的方式重写演员吗?
任何常见的模式或解决方案都会很棒。