【问题标题】:Why does asp .net core not log exceptions in async methods?为什么 asp .net core 不在异步方法中记录异常?
【发布时间】:2020-09-10 13:52:03
【问题描述】:

我有一个 .asp 网络核心项目,它在 Configure 方法中运行一些永无止境的 async 任务。在注意到这些方法中的异常没有记录到控制台之后。我只是做了一个小测试。像这样的:

public async void Configure(IApplicationBuilder app, IWebHostEnvironment env, ApplicationDbContext context)

{
        try
        {
            Task.Run(async () => { throw new Exception("My exception"); });
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            throw;
        }
}

为什么不在async 方法中记录这些异常?如果我只是在配置中抛出异常,它会毫无问题地抛出并记录到控制台。

【问题讨论】:

  • Task 中抛出的所有异常只能使用 AggregateException 捕获
  • 如果您希望能够捕获异常,您应该将函数的返回类型从“void”替换为“Task”。

标签: c# asp.net-core exception .net-core


【解决方案1】:

不能用 catch 捕获来自异步 void 方法的异常。

可以使用AppDomain.UnhandledException 或类似的用于 GUI/ASP.NET 应用程序的包罗万象的事件来观察这些异常,但将这些事件用于常规异常处理会导致不可维护性。

更多详情请看官方文档here

【讨论】:

    猜你喜欢
    • 2016-10-13
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    相关资源
    最近更新 更多