代码之家  ›  专栏  ›  技术社区  ›  Andreas Zita

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

  •  0
  • Andreas Zita  · 技术社区  · 7 年前

    当停止一个 ASP.NET Core 具有实例的服务器 IHostedService S,可以打电话给 StopAsync 输入同时仍在处理请求线程?或者对StopAsync的调用将自动等待所有活动请求线程完成?一旦StopAsync正在进行,新的请求是否会停止?

    我不确定这是特定于 iHostedService公司 . 也许问题是天气 ASP.NET核心 一般情况下,如果在处理请求期间启动关机,则在继续关机之前将等待请求完成?如果这反过来也导致 停止异步 关于 iHostedService公司 推迟到请求完成。

    如果 ASP.NET核心 一般情况下,一旦启动关机,是否会停止新的请求?

    1 回复  |  直到 7 年前
        1
  •  0
  •   poke    7 年前

    托管服务在请求之外运行,因此它们真的不应该关心是否有正在进行的请求。

    也就是说,托管服务已经启动 之后 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 你的 IHostedService 跑。

    推荐文章