IHostedService.StopAsync是否在等待请求线程?

时间:2018-10-22 16:28:55

标签: asp.net-core

在停止带有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 通常会在关闭开始后停止新请求?

1 个答案:

答案 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}}运行时所有请求都会被终止。