Response.Redirect と System.Threading.ThreadAbortException: 総合ガイド
ASP.NET Web 開発では、ページのリダイレクトに Response.Redirect
を使用すると、恐ろしい System.Threading.ThreadAbortException
が発生することがあります。この例外は、リダイレクトが開始された後、Web サーバーが現在のページの処理を突然停止するために発生します。
根本的な原因は Response.Redirect
の性質にあります。 実行すると、元のページでのそれ以降のコードの実行、レンダリング、またはイベント処理が直ちに停止されます。 非同期操作またはその他の長時間実行タスクがまだアクティブな場合、この突然の終了により ThreadAbortException
.
Response.Redirect
を endResponse
に設定して false
オーバーロードを使用すると、サーバーはページの処理を完了できますが、このアプローチは非効率的であり、ユーザーがすでに移動した後でリソースを無駄にします。
より効率的な解決策には、endResponse = false
オーバーロード を使用し、 を使用してその後 Context.ApplicationInstance.CompleteRequest()
を呼び出すことが含まれます。これにより、IIS パイプラインは EndRequest
フェーズに直接ジャンプし、例外なくページの処理を即座に終了し、リソースの使用量を最小限に抑えます。
Application_Error
ハンドラー内でのリダイレクトなどのシナリオのベスト プラクティスやソリューションを含む、高度な技術について詳しくは、Thomas Marquardt による元の応答でリンクされているブログ投稿を参照してください (外部リンクであるため、ここにはリンクはありません)。 このリソースは、リダイレクト プロセスの複雑さを効果的に処理するための貴重な洞察を提供します。
以上がResponse.Redirect が System.Threading.ThreadAbortException をスローする場合があるのはなぜですか?また、それを防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。