我有一个带有托管服务的 .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 ×1