0

私は、もうここで働いていない人が開発したコンソール アプリに取り組んでいます。デバッグ中に ContextSwitchDeadlock 例外がスローされました (この質問は例外で見つかりました)。私がそれを無視すると、アプリは最終的にそれが発生したループを通過します。アプリはスケジュールされたタスクとして毎日実行されますが、この特定のプロセスは毎回呼び出されるわけではありません。

この例外を本番環境に移行しても問題ないかどうか疑問に思っています。このアプリの作成者は、この例外を除いて実稼働環境に置き、それ以来実行されています。(この例外とは無関係の) 更新を行い、アプリをそのままにしておく必要がありますか? それとも、問題に対処する必要がありますか? それに対処することは私には気が遠くなるようです:/

4

1 に答える 1

1

ベン。私は「いいえ」と言うでしょう。例外が ThreadAbortException (つまり、ユーザーがウィンドウを閉じたためにプロセスが停止した) またはそのようなものでない限り、このような例外により、コードがカスケード エラーに発展する可能性があります。私が働いている場所で私たちが何をしているかに基づいて:

  1. 応急処置として、問題のあるコードを Try-Catch でカプセル化し、キャッチするたびに電子メールを送信するように配線して、何が起こっているかに関するドキュメントを作成し、カスケード障害が伝播するのを防ぐ必要があると思いますコード全体で (問題を隔離します)。

  2. 修正に向けて (時間があれば)、それをデバッグし、ステップスルーして、メインスレッドが非常に長くかかっている理由を突き止めます。可能であれば、それを処理するワーカー スレッドを作成します (免責事項: これは、この問題は、あなたが提供したリンクからの回答に基づいています.私はこれをテストしていませんし、これがうまくいくと断言するのに十分な経験もありません.

編集:特に長時間実行されているプロセスでこのエラーに遭遇した後、msdn でこの多数の回答に出くわしました:

http://social.msdn.microsoft.com/Forums/en/vsto/thread/bf71a6a8-2a6a-4c0a-ab7b-effb09451a89

エラーを解決しましたが (String と StreamReader の ReadToEnd メソッドを使用する代わりに、System.IO.FileStream を String Builder に読み込んでいました)、参考になると思います。

于 2012-09-27T15:59:58.493 に答える