Мне нужно разбить серию удаленных вызовов на куски. Я думал об использовании актеров.
Я подумал о чем-то вроде этого:
class ControlActor() extends Actor{
var counter = 1000
def act{
for (i <- 1 until 1000) { new RequestActor(this) start }
while(true){
receive{
case "Stop" =>{counter = counter-1; if(counter==0){return}}
}
}
}
}
class RequestActor(parent:ControlActor) extends actor{ ... }
но у этого есть очевидная проблема: когда я попадаю в блок получения, некоторые экземпляры RequestActor, возможно, уже завершили выполнение. Что произойдет, если они отправят сообщение субъекту, который еще не находится в состоянии получения сообщения? сообщение ставится в очередь или отбрасывается?
Самое главное: как создать дочерние акторы, которые смогут уведомить создавшего их актора, даже если они возвращаются очень быстро?
Также связано: рекомендуется ли передавать текущий экземпляр актера (this
) другим актерам? Почему-то я не видел, чтобы кто-то это делал.