Когда вы используете какой-либо из пакетов интеграции Rebus Io C (Rebus.ServiceProvider, Rebus.CastleWindsor, Rebus.Autofa c, et c.), Он автоматически настраивается и закрывается изящно отключается при удалении контейнера.
Итак, если вы хотите, чтобы шина корректно завершала работу, просто убедитесь, что контейнер Io C, в котором он размещен, будет удален при завершении работы вашего приложения.
Это также относится к встроенному адаптеру контейнера (который на самом деле не является контейнером Io C, скорее своего рода фабрикой обработчиков) - просто сделайте это (или что-то подобное):
using (var activator = new BuiltinHandlerActivator())
{
Configure.With(activator)
.Transport(...)
.(...)
.Start();
// bus is running now
}
// bus is stopped – all handlers have finished executing
, а затем шина корректно отключится, останавливая операции приема, давая всем обработчикам до 60 секунд (если я правильно помню), чтобы завершить sh все, что они делают.