なぜこれが起こるのか分かりませんし、スレッドを明示的に中止することもありませんので、少し驚きです。しかし、私は例外を記録し、私は見ています:
System.Threading.ThreadAbortException-スレッドは中止されていました。
System.Threading.WaitHandle.WaitOne
の呼び出しで発生するようです。この例外がどこまで続くかはわかりません。ログをキャッチしてエラーを飲み込むため、スレッドが終了するとは思わない。
これらのエラーが発生するのはなぜですか?おそらく、サーバーを強制的に終了するか、再起動するように要求しているのでしょうか?そうでない場合、それらの原因は何ですか?
いいえ、ThreadAbortException
は単純な Response.Redirect
によってスローされます
Application_Start
でスレッドを生成する場合、それらは引き続きアプリケーションプールのAppDomain
で実行されます。
アプリケーションがしばらくアイドル状態になっている(要求が着信していないことを意味する)場合、または他の特定の条件が満たされている場合、ASP.NET
はAppDomain
全体をリサイクルします。
その場合、Application_Start
からのものを含め、AppDomain
から開始したスレッドはすべて中止されます。
この質問では、アプリケーションプールとリサイクルについて詳しく説明します。 Appdomainリサイクルとは何ですか
IIS/ASP.NET
内で長時間実行プロセスを実行しようとしている場合、通常、短い答えは「しない」です。それがWindowsサービスの目的です。
ASP.NETは、必要に応じてワーカープロセスを常に生成および終了します。スレッドがASP.NETによってシャットダウンされている可能性があります。
古い回答:
既知の問題: PRB:Response.End、Response.Redirect、またはServer.Transferを使用するとThreadAbortExceptionが発生する
Response.Redirect ("bla.aspx", false);
または
try
{
Response.Redirect("bla.aspx");
}
catch (ThreadAbortException ex)
{
}
ASP.NETでホストされるWebサービスの場合、構成プロパティはexecutionTimeoutです。
<configuration> <system.web>
<httpRuntime executionTimeout="360" />
</system.web>
</configuration>
これを設定すると、スレッド中止例外はなくなります:)
この問題は、Response.Redirect
およびServer.Transfer
メソッドで発生します。両方のメソッドが内部でResponse.End
を呼び出すためです。
この問題の解決策は次のとおりです。
Server.Transfer
の場合は、代わりにServer.Execute
メソッドを使用します。
このリンク にアクセスして、サンプルをダウンロードしてください。
このエラーは、応答を複数回終了しようとすると発生する可能性があります。既に述べた他の回答として、応答を終了するさまざまなメソッドがあります(Response.End
、またはResponse.Redirect
など)。連続して複数を呼び出すと、このエラーが発生します。
Response.End
を使用した後にResponse.TransmitFile
を使用しようとしたときにこのエラーが発生しました。
ユーザーのログインに成功した後にResponse.Redirect
を実行すると、このエラーが発生しました。
代わりにFormsAuthentication.RedirectFromLoginPage
を実行して修正しました。