我们正在实现一个 .NET core 3.1 worker 服务,我们需要注册几个托管服务来实现所需的业务。
本文档说明IHostedService接口的StopAsync方法应该能够侦听默认 5 秒超时后发出的取消请求。
据我了解,StopAsync方法是在主机自身关机过程中被主机调用的。
在我们的一个托管服务中,我们需要在托管服务停止过程中调用异步方法;不幸的是,这个方法不支持取消,所以我们没有一个简单的方法来以正确的方式实现StopAsync方法。
这是我们的场景:
public sealed class MyHostedService : IHostedService
{
public async Task StopAsync(CancellationToken token)
{
_logger.LogInformation("Stopping the service....");
await DoSomethingAsync(); // this method does not support cancellation, so I can't pass the cancellation token here
_logger.LogInformation("Service was stopped");
}
}
在这种情况下,主机级别会发生什么?
这种实现在任何方面都是“危险的”吗?
如果需要很长时间才能完成执行,这是否会阻止主机关闭过程StopAsync
?
这个问题最简单的解决方案是通过从BackgroundServiceMyHostedService
基类 派生来实现 该类,但我想完全理解在主机级别长时间运行实现的可能含义。StopAsync