Выполнение рабочих процессов происходит асинхронно, поэтому вы должны ждать какого-то события, которое сигнализирует о завершении.В противном случае тестовый демонтаж убьет хост до того, как рабочий процесс сможет что-либо сделать.
Первая версия этого ответа содержала:
Добавление .Wait()
или одну из его перегрузок (которые позволяют указатьмаксимальное время ожидания) до результата StartWorkflow
, чтобы заблокировать тест до завершения рабочего процесса.
К сожалению, это неправильно, поскольку StartWorkflow
возвращает Task
, получая только идентификатор экземпляра рабочего процесса.Когда эта задача решена, ваш рабочий процесс, вероятно, не сделал ничего значимого.
В GitHub есть запрос функции, запрашивающий нужную функцию: Ожидание завершения рабочего процесса
Пока этот запрос не будет решен, вы можете помочь себе, создав ManualResetEvent
или, возможно, AutoResetEvent
и поместив его куда-нибудь, к которому вы можете получить доступ к вашему последнему шагу рабочего процесса, и вызовите .Set()
для него.Ваш тест должен дождаться этого, вызвав на нем .WaitOne()
(это блокировка).
Еще одно событие, которое может быть достаточным (но неэффективным), - это просто ожидание достаточно большой продолжительности: Thread.Sleep(2000)
ждет две секунды,Помните, что даже после этого возможно, что ваш рабочий процесс не завершен из-за асинхронного характера исполнителя рабочего процесса.