ここの行の間を正しく読んでいる場合、問題は、デフォルトのデバッガー動作が未処理の例外で中断する必要があるにもかかわらず、例外が事実上「消えている」ことです。
非同期メソッドがある場合、タスクの継続の一部としてスレッドプールスレッドでキャッチされない例外は未処理の例外と見なされないため、この問題が発生している可能性があります。むしろ、それらは飲み込まれ、タスクとともに保存されます。
たとえば、次のコードを見てください。
class Program
{
static void Main(string[] args)
{
Test();
Console.ReadLine();
}
private async static Task Test()
{
await Task.Delay(100);
throw new Exception("Exception!");
}
}
このプログラムをデフォルトのデバッガー設定(未処理の例外でのみ停止)で実行すると、デバッガーは中断しません。これは、継続に割り当てられたスレッドプールスレッドが例外を飲み込み(それをタスクインスタンスに渡します)、自身を解放してプールに戻すためです。
この場合、実際の問題は、によってTask
返されたものTest()
がチェックされないことに注意してください。コードに同様のタイプの「ファイアアンドフォーゲット」ロジックがある場合、例外がスローされたときに例外は表示されません(例外がメソッド内で「未処理」であっても)。例外は、タスクを待機するか、結果を確認するか、例外を明示的に確認することによってタスクを監視する場合にのみ表示されます。
これは推測にすぎませんが、このようなことを観察している可能性があります。
Tool
またはWindow
タブに目的の場所がすべて表示されない場合は、あなたの場合、あなたは例外設定を探しています。