.net core 无法停止使用BackgroundService的Windows服务
我使用的是NetCore3.xBackgroundService,在发布代码后,我安装了作为Windows服务生成的可执行文件 在我的ExecuteAsync方法中,我有如下代码:.net core 无法停止使用BackgroundService的Windows服务,.net-core,windows-services,.net-core-3.0,background-service,.net Core,Windows Services,.net Core 3.0,Background Service,我使用的是NetCore3.xBackgroundService,在发布代码后,我安装了作为Windows服务生成的可执行文件 在我的ExecuteAsync方法中,我有如下代码: protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { //do something
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…”
谢谢您的
后台服务
正在正确停止,但应用程序没有停止
要从后台服务停止应用程序,请插入一个IHostApplicationLifetime
,并按如下方式调用它:
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
//do something
if (someConditionIsTrue)
{
_hostApplicationLifetime.StopApplication();
}
}
}
您不需要调用
this.StopAsync
,因为StopApplication
将(最终)调用它。您的后台服务
正在正确停止,但应用程序没有停止
要从后台服务停止应用程序,请插入一个IHostApplicationLifetime
,并按如下方式调用它:
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
//do something
if (someConditionIsTrue)
{
_hostApplicationLifetime.StopApplication();
}
}
}
您不需要调用this.StopAsync
,因为StopApplication
最终会调用它