0

System.Transactions.TransactionScopeを使用して、トランザクション スコープの新しいインスタンスを作成するとプログラムが停止するだけのコードがあります。

例外やメッセージは表示されず、プログラムは単に停止し、Visual Studio はコード編集モードに戻ります。プロセスは完全になくなりました。イベント ビューアには、例外、メッセージ、またはイベントはありません。

問題なく TransactionScope を使用する別のテスト アプリがあるため、環境の問題ではないはずです。

例外の詳細を取得する方法がわかりません。例外がスローされたときにVSが自動的に中断することを期待して、Visual Studio内の[デバッグ]-> [例外]ダイアログですべての「スローされた」チェックボックスをオンにしましたが、そうではありません。

プログラムが終了する理由を教えてくれる人はいますか?

編集:新しいものを見つけました。TransactionScope は、 を介してバックグラウンド スレッドで実行されているメソッドで作成されていますThreadPool.QueueUserWorkItem。メイン アプリケーション スレッドでメソッドを直接呼び出すと、この問題はなくなります。だから今私の質問は、「スレッドプールスレッドで TransactionScope を使用することの問題は何ですか?」です。新しいスレッドを呼び出す前にトランザクション スコープを開始していないことに注意してください。それはすべて、スレッドプール スレッドで実行されている 1 つのメソッド内にあります。

4

3 に答える 3

2

問題が見つかりました。私のコンピューターを操作しているのは、ぐにゃぐにゃした有機部品でした。

ThreadPool.QueueUserWorkItem()スレッドプールスレッドで作業を開始します。これは、バックグラウンド スレッドを意味します。Main()コードはテスト コンソール アプリケーションで実行されていました。もちろん、プログラムが呼び出された後にプログラムが終了するのを止めるために何かを入れるのを忘れていましたThreadPool.QueueUserWorkItem()。これは、F10 を押して次の行に進むまでに、プログラムが実際には既に停止していたため、デバッガーが自動的に終了したことを意味します。

それを修正するために私がしたことは、呼び出しをConsole.ReadKey()最後に追加することだけでProgram.Main()、今ではすべてが美しく動作します。System.Transactions.TransactionScopeこの問題は、スレッドプール スレッドとは何の関係もないことに注意してください。ブレークポイントをどの行に置いても、それは起こりました。

:
を表示する必要がThreadAbortExceptionあったと思われる場合は、上記のリンク先の記事を読むと、表示されなかった理由がわかります。ここに直接の引用があります:

プロセスがシャットダウンしているためにランタイムがバックグラウンド スレッドを停止すると、スレッドで例外はスローされません。ただし、AppDomain.Unload メソッドがアプリケーション ドメインをアンロードするためにスレッドが停止すると、フォアグラウンド スレッドとバックグラウンド スレッドの両方で ThreadAbortException がスローされます。

于 2009-05-08T11:35:40.723 に答える
0

まず、Windows イベント ログに何かありますか?

何もない場合でも、Visual Studio 自体または NTSD ( Debugging Tools for Windowsの一部) のいずれかのデバッガーを Visual Studio に接続することで、運が良くなる可能性があります。

それが失敗した場合は、ピア コード レビューが役立つ可能性があります (2 番目の目が何かに気付く可能性があります)。またはショットガン アプローチを試してください。TransactionScope を使用する別のアプリでは失敗しないのに、このアプリが失敗する理由がわかるまで、コードの一部を体系的に削除します。

于 2009-05-08T11:07:45.253 に答える
0

1 つの大雑把な推測: Microsoft 分散トランザクション コーディネーター サービス (MSDTC) が停止していますか? たとえば、Vista ではデフォルトでこのようになっています。それでも、例外がスローされることを期待していたので、なぜその動作を観察したのかわかりません。

于 2009-05-08T10:06:19.923 に答える