首頁 > 後端開發 > C++ > 為什麼 Async Void 在 ASP.NET 中會導致「System.InvalidOperationException」?

為什麼 Async Void 在 ASP.NET 中會導致「System.InvalidOperationException」?

Susan Sarandon
發布: 2025-01-04 16:25:39
原創
672 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板