【发布时间】:2020-11-14 19:01:00
【问题描述】:
我刚刚尝试在模板化 Web API (dotnet 5) 中使用 async Task Main 方法。这是我的样板代码:
public class Program
{
public static async Task Main(string[] args)
{
await CreateHostBuilder(args).Build().RunAsync();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup<Startup>());
}
我注意到 RunAsync 需要一个取消令牌,我希望它基于应用程序关闭。
我的问题 - 在此处设置与进程关闭相关联的取消令牌的正确(标准)方法是什么?
我可以这样做:
public static async Task Main(string[] args)
{
var cts = new CancellationTokenSource();
AppDomain.CurrentDomain.UnhandledException += (s, e) => { if (e.IsTerminating) cts.Cancel(); };
AppDomain.CurrentDomain.ProcessExit += (s, e) => cts.Cancel();
Console.CancelKeyPress += (s, e) => { e.Cancel = true; cts.Cancel(); };
await CreateHostBuilder(args).Build().RunAsync(cts.Token);
}
但想知道我是否缺少更标准的方法。
提前感谢您的任何提示!
【问题讨论】:
标签: c# .net asynchronous asp.net-web-api cancellation-token