我注意到如果在从异步控制器操作(即Task<ActionResult>
)提供的Razor View中遇到运行时错误,则异常会挂起Web应用程序。我只能通过重新启动IIS来清除它。这里令人烦恼的是,因为异步IO中没有发生错误(即,在对数据库的API调用中),但是在Razor View中,该异常似乎被线程吞没了。我只能通过从API调用和控制器中删除异步来诊断View是原因,此时View上的运行时错误表现出来。
我的问题是,有没有办法通过异步控制器操作来避免这些死锁情况?我尝试将同步上下文设置添加到web.config,以及将ConfigureAwait(false)
附加到API异步调用,但无济于事。似乎错误是在View上生成的,而不是在API调用中生成,这些措施对于处理异常来说为时尚早。
我正在使用在.NET 4.0.30319上运行的MVC 5.2.3