【发布时间】:2021-03-24 01:49:01
【问题描述】:
我有一个内置于 .NET Core 3.1 的 Windows 服务。该服务包含多个 BackGroundService 类,每个类都执行一个操作。每个后台服务都有一个类似于以下内容的循环:
while (!stoppingToken.IsCancellationRequested)
{
// do stuff
}
在其中一个 BackgroundService 实现中,我希望能够(在特定条件下)停止整个 Windows 服务。
所以,基本上,我需要知道如何获得对所有其他服务的 CancellationTokens 的访问权(或者某种等效的方式来终止整个服务)。
我已经尝试过大锤方法( Environment.Exit(-1); )。这似乎有效 - 但在打印出一条说明它正在等待 IHost 处理的行后它挂起。我猜这意味着 Environment.Exit 没有触发取消令牌? (或者,我有一个线程一直挂在亲爱的生命中,可能没有听它的取消令牌......)
【问题讨论】: