Abort MassTransit StartAsync

问题描述 投票:0回答:1

在服务的启动阶段,我们启动MassTransitClient订阅。启动在后台线程上运行。

void Startup()
{
 ...
  var busProvider = serviceProvider.Get<IBusProvider>();
  busProviderLaunchTask = busProvider.StartAsync();
  tokenSource = new CancellationTokenSource();
  busProviderLaunchTask.Wait(busProviderTokenSource.Token);
}

有一个Stop()方法可在完成清理后停止托管服务。问题是服务过早停止-启动代码尚未完成-我们需要确保busProvider已停止。第一个问题是busProvider.StartAsync()挂了一段时间-如何中止?中止后台线程可以解决所有问题-但是busProvider有很多例外。另外,由于我们不知道哪些初始化成功以及哪些没有初始化,因此Stop方法的清除变得不确定。

当我们真正想要停止时,等待整个开始完成的时间太长。这些挂起了:busProvider.StartAsync()busProviderLaunchTask.Wait()

如您所见,已经做了一些提供CancellationSource的尝试,但这都是很原始的。

一般有什么想法吗?具体来说,我们可以过早关闭busProvider吗?

c# asynchronous masstransit
1个回答
0
投票

将取消令牌传递给StartAsync(CancellationToken cancellationToken)

© www.soinside.com 2019 - 2024. All rights reserved.