.NET Core 7上具有IHostedService作为BackgroundService的Windows服务在关闭时不调用OnStop()方法

3qpi33ja  于 2023-03-09  发布在  Windows
关注(0)|答案(1)|浏览(206)

我有这个服务注册和启动时,电脑是打开。该服务只是监测文件夹的活动,它应该写入一个文本文件的一些数据时,电脑正在关闭。
我尝试在StopAsync函数被触发时执行此操作,该函数是BackgroundService实现的一部分。
为了简化测试,我刚刚添加了一条日志消息,下次重新启动电脑时,该消息将出现在windows事件日志中。如果我手动停止服务,该消息将正确出现,即使在执行保存文件任务时,也会出现这种情况。
但是当我关闭PC时,一旦我再次启动它,所有其他消息都在Windows事件日志中,除了最后一条,来自StopAsync的消息。
我的StopAsync函数如下所示:

public override Task StopAsync(CancellationToken cancellationToken) {
     logger.LogWarning("Test Service is Stopping...");
     return base.StopAsync(cancellationToken);
 }

我没有设置"快速启动"系统配置。
我错过什么了吗?

col17t5w

col17t5w1#

尝试使用RequestAdditionalTime的校正覆盖方法OnShutdown()

protected override void OnShutdown()
{
    // Increase the service shutdown timeout to 60 seconds
    this.RequestAdditionalTime(60000);

    // Call the base method to handle the shutdown event
    base.OnShutdown();
}

我认为问题可能是操作系统在调用StopAsync()之前强制终止了您的服务。

相关问题