ThreadAbortException
他の誰かがそれを呼び出したためにワーカー スレッドでAが発生するThread.Abort
ため、おそらくワーカー スレッドが直接行ったものではなく、何らかの外的原因によるものです。最初に確認する必要があるのは、実行する可能性のあるスレッド管理または中止の独自のコードです。それ以外の場合、IIS の場合、これはワーカー プロセス (w3wp.exe) またはアプリ プール、または AppDomain のリサイクルが原因である可能性があります。
リサイクルは、アプリ プールのアイドル タイムアウト設定、定期的にスケジュールされたリサイクル、またはメモリ/CPU 使用トリガーが原因である可能性があります。これらは、サーバー エクスプローラー (Win 2K8 の場合) の IIS 構成マネージャーを使用するか、inetmgr.exe を実行するだけで構成できます。Tess のブログ(こちら) によると、AppDomain のリサイクルには他にも多くの理由があります。
- Machine.Config、Web.Config、または Global.asax が変更されている
- bin ディレクトリまたはその内容が変更されている
- 再コンパイル (aspx、ascx、または asax) の数が、machine.config または web.config の設定で指定された制限を超えています (既定では、これは
- 仮想ディレクトリの物理パスが変更されました
- CAS ポリシーが変更されました
- Web サービスが再起動されます
- (2.0 のみ) アプリケーション サブディレクトリが削除される
そのブログ投稿には、リサイクルが発生した理由を追跡するための情報も含まれています。まず、イベント ログ (eventvwr.msc) を調べて、詳細な情報があるかどうかを確認してください。
ワーカー プロセスを直接デバッグすることもできます。コードが実行される w3wp.exe インスタンスに VS デバッガーをアタッチし、ブレークポイントを追加しThread.Abort
(デバッガー オプションで ".NET Framework ソース ステップ実行" を有効にする必要がある場合があります)、Abort
コール スタックを使用して がどこから発生したかを確認します。窓。なぜそれが起こっているのかはわかりませんが、少なくとも誰がそれをしているのかはわかります.