Это обычный сценарий, с которым я сталкиваюсь, где у меня есть два (или более) субъекта, которые получают некоторые данные асинхронно, а затем мне нужно выполнить операцию, когда все будет готово.Akka.net ждет несколько фрагментов данных
Каков общий шаблон для этого?
Вот упрощенный пример.
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
});
}
}
Чтобы начать это у меня отправить на DoSomeWork
сообщение MasterActor
.
Каков общий способ выполнения операции, когда у меня есть как Actor1Response
, так и Actor2Response
.
Я действительно не хочу иметь логику в каждом обработчике приема, проверяя, завершен ли другой или что-то в этом роде. Я думаю, что я думаю о чем-то подобном методу Task.WaitAll()
.
Я просто атакую проблему не так? Нужно ли мне переписывать актеров по-другому?
Любые общие шаблоны или решения были бы удивительными.