Некоторые проблемы с тестированием Akka.net

Из javadoc для Executors.newCachedThreadPool():

Нити, которые не использовались в течение шестидесяти секунд, завершаются и удаляются из кеша.

Обычно рекомендуется называть shutdown() на ExecutorService, если вы знаете, что никакие новые задачи не будут отправлены на него. Затем все задачи в очереди будут завершены, но служба немедленно отключится.

(Альтернативно, если вам все равно, все ли завершены задачи, например, если они обрабатывают фоновые вычисления, которые не имеют значения, как только ваш основной интерфейс исчезнет - тогда вы можете создать ThreadFactory, который устанавливает все потоки в этом пуле, чтобы быть демоном.)

0
задан Vladimir Luzhin 13 July 2018 в 07:03
поделиться

1 ответ

branchUserActor.Tell(UserBeingOnline.Create(userId, branchId));

var expectedChildActor = Sys.ActorSelection($"{actorPath}/user_{userId.AkkaPrepare()}")
  .ResolveOne(TimeSpan.FromSeconds(1)).Result;

Проблема заключается в том, что когда вы говорите UserBeingOnline, вы запускаете асинхронное действие - сообщение отправлено на branchUserActor, но оно, возможно, не было обработано сразу. Тем временем вы вызываете решение one, которое сообщает системе actor, чтобы найти дочерний элемент branchUserActor - дочерний элемент, которого еще нет, поскольку родитель еще не обрабатывал сообщение.

Вы можете использовать метод AwaitAssert (() => Assert.IsNotNull (ResolveChild ())) для работы с этим.

1
ответ дан Horusiath 17 August 2018 в 13:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: