Если я правильно распознаю код, он основан на вашем предыдущем вопросе (и моем ответе).
Программа ожидает, пока supervisor agent не завершится (отправив сообщение Start
и затем ожидая ответа, используя RunSynchronously
).Это должно гарантировать, что основной агент, а также все сканеры завершают работу до выхода из приложения.
Проблема заключается в том, что он не ожидает завершения работы агента printer
!Итак, последний вызов (переопределенной) функции printfn
отправляет сообщение агенту, а затем приложение завершается, не дожидаясь окончания работы агента печати.
Насколько я знаю, «стандарт» отсутствуетшаблон "для ожидания, пока агент не завершит обработку всех сообщений, находящихся в данный момент в очереди.Вот некоторые идеи, которые вы можете попробовать:
Вы можете проверить свойство CurrentQueueLength
(подождите, пока оно не станет 0), но это все еще не означает, что агент завершен обработка всех сообщений.
Вы можете сделать агента более сложным, добавив новый тип сообщения и подождать, пока агент ответит на это сообщение (точно так же, как вы ожидаете ответа на * 1026).* сообщение).