ホームページ >バックエンド開発 >C++ >ASP.NET で Async Void によって「System.InvalidOperationException」が発生するのはなぜですか?

ASP.NET で Async Void によって「System.InvalidOperationException」が発生するのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-04 16:25:39672ブラウズ

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 メソッドは、MVC フレームワークをバイパスして、ASP.Net SynchronizationContext に直接通知します。

タスク リターンと非同期 Void:

非同期 void メソッドとは異なり、タスクを返す非同期メソッド:

  • フレームワークが返されたメソッドを管理できるようにします。タスクを実行し、その完了を待ちます
  • リクエストのライフサイクルとの適切な同期を確保します
  • リクエストからの早期復帰によって発生する例外を回避します (async void の一般的な方法)

提供された例では:

  • ThisPageWillLoad() は非同期タスクを使用します。これは、MVC フレームワークが返されたタスクを待機するため、期待どおりに動作します。
  • ThisPageWillNotLoad() は async void を使用し、ASP.Net ではページの読み込みが完了する前にメソッドが完了することを期待しているのに対し、async void メソッドは例外を発生させます。まだ完了していません。

「Fire and Forget」誤解:

ASP.Net では、非同期 void メソッドを「起動して忘れる」と見なすべきではありません。一部のシナリオでは、ファイア アンド フォーゲットのように見えるかもしれませんが、エラー処理セマンティクスは、それらが本当に忘れっぽいものではないことを示しています。

追加の考慮事項:

  • タスクを返すことと async void を同時に使用することはサポートされていません。
  • 一部のサードパーティ ライブラリは async void を使用する場合がありますが、複雑さを引き起こす可能性があるため、このようなライブラリの使用は避けることが重要です。
  • TAP over EAP を使用する必要がある場合は、TAP-over-APM を検討するか、Task.Run で EAP コンポーネントをラップすることを検討してください。

以上がASP.NET で Async Void によって「System.InvalidOperationException」が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。