Насколько я знаю, все операции в Akka.Net асинхронны, и Context.Stop()
просто отправляет сообщение Stop
актору. Это означает, что актор будет жить некоторое время, прежде чем он полностью отключится.
И если я позвоню Context.Child()
сразу после Context.Stop()
по имени актера, которого только что остановил, то получу того же актера.
Вот пример кода
var actor = context.Child(actorName);
if (actor.Equals(ActorRefs.Nobody))
{
actor = CreateNewActor();
}
Context.Stop(actor)
actor = context.Child(actorName);
// what do we get here, same actor or ActorRefs.Nobody ?
Мое приложение создает актеров для обработки событий с терминалов. Каждый раз, когда подключается новый терминал, я создаю нового актера, вызывая Context.Child()
, используя имя терминала. Когда терминал отключается, я останавливаю актера.
Проблема в том, что несколько раз я получаю сообщение Connect сразу после Disconnect для того же терминала, и в результате я получаю актор, который будет остановлен. Есть ли способ проверить, что актор получил стоп-сообщение и скоро будет остановлен?