Windows 无法停止使用 BackgroundService 的服务
Windows service using BackgroundService cannot be stopped
我正在使用 Net Core 3.X BackgroundService,在发布我的代码后,我安装了作为 Windows 服务生成的可执行文件。
在我的 ExecuteAsync 方法中,我有一些这样的代码:
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
//do something
if(someConditionIsTrue)
{
await this.StopAsync(new CancellationToken());
}
}
}
对 StopAsync 的手动调用会停止执行并退出 while 循环,但是当我转到 services.msc 时,我看到我的 Windows 服务仍处于 运行 状态,尽管是没有执行任何事情。
如何自动停止服务而不调用 "cmd \c sc stop..."?
谢谢
您的 BackgroundService
正在正确停止,但 应用程序 没有停止。
要停止来自后台服务的应用程序,请注入IHostApplicationLifetime
并这样调用它:
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
//do something
if (someConditionIsTrue)
{
_hostApplicationLifetime.StopApplication();
}
}
}
您不需要调用 this.StopAsync
,因为 StopApplication
会(最终)调用它。
我正在使用 Net Core 3.X BackgroundService,在发布我的代码后,我安装了作为 Windows 服务生成的可执行文件。
在我的 ExecuteAsync 方法中,我有一些这样的代码:
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
//do something
if(someConditionIsTrue)
{
await this.StopAsync(new CancellationToken());
}
}
}
对 StopAsync 的手动调用会停止执行并退出 while 循环,但是当我转到 services.msc 时,我看到我的 Windows 服务仍处于 运行 状态,尽管是没有执行任何事情。
如何自动停止服务而不调用 "cmd \c sc stop..."?
谢谢
您的 BackgroundService
正在正确停止,但 应用程序 没有停止。
要停止来自后台服务的应用程序,请注入IHostApplicationLifetime
并这样调用它:
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
//do something
if (someConditionIsTrue)
{
_hostApplicationLifetime.StopApplication();
}
}
}
您不需要调用 this.StopAsync
,因为 StopApplication
会(最终)调用它。