На этапе запуска сервиса мы запускаем подписки MassTransitClient. Запуск запускается в фоновом потоке.
void Startup()
{
...
var busProvider = serviceProvider.Get<IBusProvider>();
busProviderLaunchTask = busProvider.StartAsync();
tokenSource = new CancellationTokenSource();
busProviderLaunchTask.Wait(busProviderTokenSource.Token);
}
Существует метод Stop () для остановки размещенной службы, в которой выполняется очистка. Проблема в том, что служба останавливается преждевременно - код запуска еще не завершен - мы должны убедиться, что busProvider остановлен. Первая проблема заключается в том, что busProvider.StartAsyn c () некоторое время зависает - как его можно прервать? Прерывание фонового потока решает все проблемы, но есть много исключений из busProvider. Кроме того, очистка метода Stop становится неопределенной c, поскольку мы не знаем, что удалось инициализировать, а что нет.
Ожидание всего начала до конца sh, когда мы действительно хотим остановить, слишком долго. , Они висят: busProvider.StartAsyn c () busProviderLaunchTask.Wait ()
Как видите, предпринята некоторая попытка предоставить CancelationSource, но все это довольно сыро.
Любые идеи в общем? В частности, можем ли мы преждевременно отключить busProvider?