Это может быть связано с предыдущим вопросом , но я не уверен .......
У меня есть подсистема на основе Scala / Actor, которая использует 3 взаимодействующих актера для выполнения некоторой работы. Каждый из актеров на самом деле является DaemonActor. Внешние сообщения отправляются первичному субъекту, а иногда сообщения отправляются второстепенным субъектом первичному субъекту с просьбой сделать что-то с данными, полученными из внешних сообщений.
Я написал Scala-программу для тестового драйвера, которая запускает подсистему, о которой идет речь, и использует DaemonActor для отправки сообщений подсистеме (то есть первичному актору).
Оказывается, что сообщения, отправленные первичному действующему субъекту, были обработаны первичным действующим субъектом, но сообщения, отправленные действующим субъектом вторичной подсистемы первичному действующему субъекту, не были обработаны.
Я обнаружил, что если я сделал Actor в программе test-driver не-Deamon Actor, а не DaemonActor, все работало бы так, как ожидалось. Это было на 100% детерминировано в том, что когда внешний тест-драйвер использовал Actor, подсистема всегда вела себя. Когда внешний тест-драйвер использует DaemonActor, подсистема всегда ведет себя неправильно. Никаких других изменений в коде не было сделано при переключении между Actors и DaemonActors.
Что еще более странно, когда я сделал расширенный тестовый драйвер, который использовал 2 актера для отправки 2 различных типов сообщений в подсистему, мне пришлось сделать одного из акторов тестового драйвера DaemonActor или подсистему, получающую сообщения, неправильно. вели себя.
Кажется довольно случайным: -)
Следует обратить внимание на одно предостережение: субъекты драйвера тестирования фактически вызывают методы в классе подсистемы, который «переводит» вызов метода в сообщение, отправляемое первичному субъекту подсистемы. Это для совместимости с кодом Java.
Я пробовал несколько разных способов узнать, обрабатываются ли сообщения. Однако я сделал это, мне нужна была информация из программы, пока она работала, и я перешел к распечатке материала. Таким образом моя ссылка на ветку вопроса о печати и очистке буферов. Единственное, что, казалось, влияло на поведение, было Actor vs. DaemonActor.
Я мог бы отправить код, но это было бы довольно много.
Любое понимание будет оценено!