首页 > 后端开发 > C++ > 为什么 Async Void 在 ASP.NET 中会导致'System.InvalidOperationException”?

为什么 Async Void 在 ASP.NET 中会导致'System.InvalidOperationException”?

Susan Sarandon
发布: 2025-01-04 16:25:39
原创
668 人浏览过

Why Does Async Void Cause `System.InvalidOperationException` in ASP.NET?

了解 ASP.Net 中的 Async Void:未完成的操作计数

问题: ASP.Net 中的 Async void 方法应用程序提出以下问题异常:

System.InvalidOperationException: An asynchronous module or handler 
completed while an asynchronous operation was still pending
登录后复制

解释:

ASP.Net 中的异步方法在调用时增加未完成操作的计数,并在完成时减少它。 Async void 方法直接通知 ASP.Net SynchronizationContext,绕过 MVC 框架。

任务返回与 Async Void:

与 async void 方法不同,从异步方法:

  • 允许框架管理返回的任务并等待其完成
  • 确保与请求生命周期正确同步
  • 避免因请求提前返回而导致的异常(async void 的常见做法)

在提供的示例中:

  • ThisPageWillLoad() 使用异步任务,它按预期工作,因为 MVC 框架正在等待返回的任务。
  • ThisPageWillNotLoad() 使用 async void,导致异常,因为 ASP.Net 期望该方法在页面加载完成之前完成,而 async void 方法尚未完成。

“即发即忘”误解:

异步 void 方法应该在 ASP.Net 中不被视为“即发即忘”。虽然它们在某些情况下可能看起来是“即发即忘”,但错误处理语义表明它们并不是真正的健忘。

其他注意事项:

  • 不支持同时返回Task和使用async void。
  • 一些第三方库可能会使用async void,但是避免使用此类库非常重要,因为它们可能会导致复杂化。
  • 如果您需要使用 TAP 而不是 EAP,请考虑使用 TAP-over-APM 或使用 Task.Run 包装 EAP 组件。

以上是为什么 Async Void 在 ASP.NET 中会导致'System.InvalidOperationException”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板