【问题标题】:How to kill a windows service containing multiple background services from within the service如何从服务中杀死包含多个后台服务的 Windows 服务
【发布时间】: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 没有触发取消令牌? (或者,我有一个线程一直挂在亲爱的生命中,可能没有听它的取消令牌......)

【问题讨论】:

    标签: c# .net-core


    【解决方案1】:

    Microsoft.Extensions.Hosting.IHostApplicationLifetime 注入您的服务并在需要时调用StopApplication

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-26
      • 2014-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多