为什么这个异步控制器操作在调试时挂起?
Why does this async controller action hang while debugging?
自从我从一开始就开始使用 ASYNC 处理 MVC 项目 - 所有控制器、数据库调用等都是异步等待的,我一直处于调试地狱。我从来没有得到有用的 debug/exception 信息 - 它丢失在系统的内部。我必须进入 ELMAH 或 AI 来查看异常,因为它永远不会冒泡并结束请求。
在大多数情况下,页面将旋转离开,直到浏览器放弃。我在某处遗漏了什么吗?例如,我在页面上有错误(空引用),但由于页面是异步的,所以我从未看到异常。
与这里提出的大多数容易导致死锁的问题不同,此代码库中的任何地方都没有使用 .Result。这是异步的形式开始和所有的方式。
澄清一下,这里是这个 MVC 控制器的确切工作流程。我做了一些更改以测试它何时挂起和何时不挂起。
控制器
public async Task<ActionResult> Review(Guid id)
{
var quote = await Quotes.GetQuoteById(id);
return View();
}
服务
return await Ef.DbSet.Where(d => d.Id == id).FirstOrDefaultAsync();
查看(第一行)
@{ throw new ApplicationException("you failed"); }
使用上面的设置我永远不会看到异常。它只是挂起。但是,如果我将控制器更改为:
return View();
var quote = await Quotes.GetQuoteById(id);
然后我得到了我的例外。如果我将服务更改为非异步,我也会遇到异常。因此,与引用的重复问题不同,我在任何地方都没有 unawaited 电话。但是 async/await 是导致浏览器挂起的原因。
有办法调试吗?有趣的是,这只发生在调试期间,在生产中,异常将按预期引发。
Re-asked/Clarified/Non-Duplicate
这最初是 asked here but it was closed as duplicate of this question,但事实并非如此。添加说明以说明为什么不是。但是由于它们以明确的重复形式关闭,您甚至看不到它,所以我不得不提出一个新问题。
它与 Microsoft/Azure 的 Application Insights 相关。我必须更深入地研究它(因为我刚刚删除了所有 AI 引用并且我需要重新安装以进行调查),但这可能是我对 AI 进行的未等待的异步调用或 AI 内部的错误(它是预-发布)。我只手动对 AI 进行了三次调用,我没有收到任何关于未等待异步调用的警告,所以我认为情况并非如此,可能是 AI 内部或设计上的错误。
卸载 AI 让异常像往常一样流动。
自从我从一开始就开始使用 ASYNC 处理 MVC 项目 - 所有控制器、数据库调用等都是异步等待的,我一直处于调试地狱。我从来没有得到有用的 debug/exception 信息 - 它丢失在系统的内部。我必须进入 ELMAH 或 AI 来查看异常,因为它永远不会冒泡并结束请求。
在大多数情况下,页面将旋转离开,直到浏览器放弃。我在某处遗漏了什么吗?例如,我在页面上有错误(空引用),但由于页面是异步的,所以我从未看到异常。
与这里提出的大多数容易导致死锁的问题不同,此代码库中的任何地方都没有使用 .Result。这是异步的形式开始和所有的方式。
澄清一下,这里是这个 MVC 控制器的确切工作流程。我做了一些更改以测试它何时挂起和何时不挂起。
控制器
public async Task<ActionResult> Review(Guid id)
{
var quote = await Quotes.GetQuoteById(id);
return View();
}
服务
return await Ef.DbSet.Where(d => d.Id == id).FirstOrDefaultAsync();
查看(第一行)
@{ throw new ApplicationException("you failed"); }
使用上面的设置我永远不会看到异常。它只是挂起。但是,如果我将控制器更改为:
return View();
var quote = await Quotes.GetQuoteById(id);
然后我得到了我的例外。如果我将服务更改为非异步,我也会遇到异常。因此,与引用的重复问题不同,我在任何地方都没有 unawaited 电话。但是 async/await 是导致浏览器挂起的原因。
有办法调试吗?有趣的是,这只发生在调试期间,在生产中,异常将按预期引发。
Re-asked/Clarified/Non-Duplicate 这最初是 asked here but it was closed as duplicate of this question,但事实并非如此。添加说明以说明为什么不是。但是由于它们以明确的重复形式关闭,您甚至看不到它,所以我不得不提出一个新问题。
它与 Microsoft/Azure 的 Application Insights 相关。我必须更深入地研究它(因为我刚刚删除了所有 AI 引用并且我需要重新安装以进行调查),但这可能是我对 AI 进行的未等待的异步调用或 AI 内部的错误(它是预-发布)。我只手动对 AI 进行了三次调用,我没有收到任何关于未等待异步调用的警告,所以我认为情况并非如此,可能是 AI 内部或设计上的错误。
卸载 AI 让异常像往常一样流动。