小编Mic*_*ino的帖子

Environment.Exit 后托管服务未终止

我有一个带有托管服务的 .NET Core 3.1 应用程序,该应用程序在 Windows 上作为控制台应用程序运行。

如果出现错误,我会尝试使用Environment.Exit(1).

现在的问题是,如果Enviroment.Exit()在任何awaitin之前调用ExecuteAsync,应用程序不会终止。它记录Waiting for the host to be disposed. Ensure all 'IHost' instances are wrapped in 'using' blocks.然后无限期地挂起。
当我在调用Enviroment.Exit()它之前等待任何东西时也会记录它,但它会按预期终止。

这是我可以想出的最简单的代码来重现问题。
NotTerminatingWorker挂起永远的TerminatingWorker终止。唯一的区别是一个微小的Task.Delay


  public class Program {
    public static async Task Main(string[] args) {
      using var host = CreateHostBuilder(args).Build();
      await host.RunAsync();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) {
      return Host.CreateDefaultBuilder(args)
        .ConfigureServices((hostContext, services) => { services.AddHostedService<NotTerminatingWorker>(); });
    }
  } …
Run Code Online (Sandbox Code Playgroud)

.net-core

7
推荐指数
1
解决办法
2661
查看次数

标签 统计

.net-core ×1