問題タブ [threadabortexception]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - ASP.NET アプリの Thread.Abort により w3wp.exe がクラッシュする
この質問に重複フラグを設定しないでください。 「ThreadAbortException が発生する理由」ではなく、「ThreadAbortException 後に w3wp.exe プロセスが終了する理由」に関するものです。
次のコード サンプルを含む単純な Web アプリケーションがあるとします。
実際には、次のようなことを意味します ( Is Response.End() は有害と見なされますか?を参照):
私のマシン (Windows 10 Pro + IIS) では、このコードにより IIS プール プロセスがエラー コード 0x0 (リダイレクトは実行されません) で終了します。他のマシン (Windows 10 ではない) では、このコードは ThreadAborted 例外のみを生成しますが、プロセスは引き続き動作します (リダイレクトが実行されます)。
誰かがこのサンプルをチェックして、何が起こっているのか説明できますか?
更新 ここに、この問題に関連するいくつかの Windows イベント ログがあります。
ログ #1
未処理の例外が発生し、プロセスが終了しました。
アプリケーション ID: /LM/W3SVC/1/ROOT/AS
プロセスID: 6700
例外: System.Threading.ThreadAbortException
メッセージ: スレッドは中止されました。
StackTrace: System.Web.HttpRuntime.ProcessRequestNotificationPrivate (IIS7WorkerRequest wr、HttpContext コンテキスト) で System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper (IntPtr rootedObjectsPointer、IntPtr nativeRequestContext、IntPtr moduleData、Int32 フラグ) で System.Web.Hosting.PipelineRuntime.ProcessRequestNotification (IntPtr rootedObjectsPointer、IntPtr nativeRequestContext、IntPtr moduleData、Int32 フラグ)
ログ #2
c# - スレッドが中止された例外 vb.net/C# を処理する方法は?
この問題に関するいくつかの質問を見てきましたが、私の問題に対する適切な回答が見つかりませんでした。最初は、jsonを関数に記述した後、次のコードを使用していました
Server cannot append header after HTTP headers have been sent
例外が発生していました。
だから私はコードを
これらのコードはすべて関数内にあり(たとえば) writeData()
、 という関数によって呼び出されCallWriteData
ます。例外は関数で正常に処理されましたが、親関数で例外WriteData()
がスローされます。Thread was being aborted
CallWriteData
正直なところ、私のプロジェクトでは大きな問題ではありませんが、この厄介な問題を修正するといいでしょう。また、この例外 CallWriteData
は毎回ではありません(正常に処理される場合もあります)。
c# - c#スレッド奇妙なThreadAbortException
私は非常に奇妙な問題に直面しています。私はそれが小さいものだと確信していますが、私はこれに私の髪を引っ張っています...
サードパーティのライブラリをアプリケーションに統合する作業を行っています。lib をダウンロードしたところ、サンプル コードが付属していました。サンプル コードを問題なくビルドして実行できました。両方のプロジェクトで何も変更せずに、lib + サンプル コードを自分のソリューション フォルダーにコピーし、それらを自分のソリューションに追加して、ビルドして実行します。サンプル アプリの最後で ThreadAbortException が発生します。これは別のフォルダで動作していました?!!!!?!
このコードは、リスニング スレッド内でソケット接続を開きます。スレッドは、ソケット情報を監視および消費します。次に、プログラムが終了する前に、runner がスレッドである runner.Abort() を実行します。私が理解できないのは、元の解凍されたフォルダーに ThreadAbortException をスローしない理由です。しかし、自分のソリューションに正確にコピーすると、スローされますか?
Thread.ResetAbort() の使用は見当たりませんでした。
これについては助けが必要です。前もって感謝します。
私が試したこと:.netフレームワークのバージョンを変更する(どのように変更しても、元のディレクトリは正常に動作しますが、独自のソリューションはThreadAbortExceptionでチョークします)
これは、Visual Studio 2013 コミュニティ エディションにあります。
読んでくれてありがとう。
以下編集***
構成ファイルは同じです。bin ディレクトリは、生成された pdb ファイルにサイズの違いがあることを示していますが、他のファイルのサイズは同じに見えます。機能しなかったコードの pdb ファイルは小さくなっています。
lib プロジェクトとサンプル プロジェクトの両方の元のディレクトリの bin を削除し、サンプル プロジェクトから参照を削除して、ソリューションから再度追加しました。ビルドされ、同じサイズ(他のソリューションよりも大きい)でビルドされます。それを実行すると、ThreadAbortException なしで正常に終了しました。次に、私は自分のソリューションで同じことを行い、より小さいサイズの pdb でビルドし、ThreadAbortException が表示されました
また、Visual Studio の両方のインスタンスが 2013 コミュニティであることも確認しました。
c# - thread.abort() メソッドを使用するときに ThreadAbortException を回避する方法はありますか?
複数のスレッドを作成しました。それは何か大きな仕事をしている。いくつかの後にすべてのスレッドを中止しましたが、時々スレッド中止が発生しています。発生を避けたい。
c# - WPF のスレッド アボート例外
アプリケーションにローダーを実装しようとしていWPF
ます。いくつかの重い操作中に UI スレッドがフリーズするため、スレッドを使用してローダーを実装する必要がありました。ローダーがロードされるたびに、新しいスレッドが作成され、ローダーがオフになると、このスレッドは (手動で) 中止されます。私が直面している問題は、時々アプリケーションがクラッシュしてThreadAbortException
.
これは、ローダーを開始するコードです。
このコードはローダーを停止するためのものです:
catch ブロックでこの例外をキャッチできません。別スレにあるからかな。ThreadAbortException を回避する方法を知りたい
asp.net-mvc - C# 6 で ThreadAbortException の動作が異なるのはなぜですか?
認証中に Response.Redirect を使用する ASP.NET MVC (5.2.3) アプリケーションがあります (これが悪いことはわかっています。これを修正する予定ですが、私の質問をユーモアにしています)。私たちが知っているように、これは をスローしますが、IIS が例外を処理する必要がある前にThreadAbortException
、パイプラインはこれをキャッチします (そしておそらくs を返します)。ResetAbort()
ビルド サーバーを MSBuild の VS2015 バージョン (2013 バージョンではなく) でビルドするように変更した後、これらの例外は処理されなくなり、Response.Redirect の 5 つのインスタンスが呼び出された後に appdomain がシャットダウンします (appdomain 設定に従って - 5 未処理) 5 分で例外 == アプリ プールを無効にします)。
コンパイラのバージョンを変更するだけでランタイムの動作が変更され、 ThreadAbortExceptionsが処理されなくなる理由がわかりません。.net フレームワークのバージョンは変更しませんでした。4.5 のままです。
試してみるべき解決策がいくつかあります (フレームワークのバージョンをアップグレードする、リダイレクトを呼び出さないなど) が、これが実際にどのように発生したかを理解するのに苦労しています。
c# - webRequest.GetResponse() が ThreadAbortException をスローする
データを API に同期する同期ジョブを実行していますが、ThreadAbortException が 1 日に数回発生し、その理由がわかりません。コードは次のようになります。
そして、スローされる例外は次のとおりです。
System.Threading.ThreadAbortException: Thread was being aborted.
at System.Net.ConnectStream.WriteHeaders(Boolean async)
at System.Net.HttpWebRequest.EndSubmitRequest()
at System.Net.HttpWebRequest.CheckDeferredCallDone(ConnectStream stream)
at System.Net.HttpWebRequest.GetResponse()
私はグーグルで検索しましたが、ほとんどの回答はこのエラーを中心に展開しているようです: https://support.microsoft.com/en-us/kb/312629
エラーの原因は何ですか? また、どのように回避または処理する必要がありますか?
c# - レガシ コードが特定の方法で ThreadAbortException に反応する単体テスト
テストしたい既存のレガシーコードがあります。要点の再現は次のとおりです。
現在、このレガシー ユニットにはいくつかの問題がありますが、今のところはテストを行っているところです。具体的には、 を上げた場合に呼び出されcollaborator.DoOtherStuff
ないことをテストしたい。Response.End()
ThreadAbort
問題: どうやってそのような例外を発生させるのですか?
でこの質問とその回答をThreadAbortException
読み、それが特別であることを理解しました。ただし、これらの投稿から、単体テストでこれを処理する方法がわかりません。
これが私の試みです:
明らかに、コンパイラーは文句を言います:ThreadAbortException
利用可能なコンストラクターがありません。また、sealed
(おそらく正当な理由で) そのため、「テスト可能な」サブクラスの作成は機能しません。
そのようなコードをテストする適切な方法は何ですか? それは実現可能ですか、それともLegacyUnit
あまりにもテストに不向きですか?
完全で最小限の再現 (NUnit 2.6.4 および Moq 4.5.9 を使用した空の .NET 4.5 クラス ライブラリ):
c# - タイマー イベントからのスレッドの中止
時間がかかりすぎる場合Timer
はキャンセルする必要があります。Thread
Thread
メソッドを開始するときに、現在のスレッドを開始しTimer
、現在のスレッドをパラメーターとしてイベントに渡します。
タイマーイベント:
しかし、Abort
呼び出しは私に例外をスローします:
「コードが最適化されているか、ネイティブ フレームがコール スタックの一番上にあるため、式を評価できません」
そしてスレッドは生き続けます。の前にタイマーを開始しstartJob()
、スレッドを直接渡すと、正常に動作します。
Thread.CurrentThread
質問:バージョンが機能しないのはなぜですか? タイマースレッドも中止しなければならないからですか?ここで何が欠けていますか?
thisとthisのようなこの例外に対して見つけた回答は、異なるコンテキストからのものであり、正確な理由を理解するのに実際には役立ちません。
編集:これがスレッドを中止またはキャンセルする間違った方法であることはわかっています。実行することになっているジョブは、SerialPort を開くことです。しかし、〜200回ごとにスレッドが返されることはなく、結果を気にせずにスレッドを強制終了する必要があります。ループ中のシミュレーションは悪い例かもしれません。