在停止带有ASP.NET Core
实例的IHostedService
服务器时,是否可以在处理请求线程的同时输入对StopAsync
的调用?还是将对StopAsync的调用自动等待直到所有活动请求线程完成?并且在StopAsync处理过程中是否会停止新请求?
我不确定这是特定于IHostedService
的。也许是这样的问题:如果关闭ASP.NET Core
是在请求处理过程中启动的,那么通常StopAsync
会在继续关闭之前等待请求完成?并且如果这又导致IHostedService
实例上的ASP.NET Core
被推迟到请求完成之前。
如果print("Input a number between 1 and 255 for red")
red = input
通常会在关闭开始后停止新请求?
答案 0 :(得分:0)
托管服务在请求之外运行,因此它们实际上不应该在乎是否正在进行请求。
话虽如此,托管服务在构建和启动Web应用程序后 启动,但在Web应用程序关闭后 停止。这是the source的休闲部分:
// Fire IApplicationLifetime.Stopping
_applicationLifetime?.StopApplication();
if (Server != null)
{
await Server.StopAsync(cancellationToken).ConfigureAwait(false);
}
// Fire the IHostedService.Stop
if (_hostedServiceExecutor != null)
{
await _hostedServiceExecutor.StopAsync(cancellationToken).ConfigureAwait(false);
}
由于Kestrel服务器通常会尝试正常关闭其连接,因此您可以期望StopAsync
的{{1}}运行时所有请求都会被终止。