デバッガーが.NETプロセスに接続されている場合、未処理の例外がスローされると(通常)デバッガーは停止します。
ただし、async
メソッドを使用している場合、これは機能しないようです。
以前に試したシナリオを次のコードにリストします。
_class Program
{
static void Main()
{
// Debugger stopps correctly
Task.Run(() => SyncOp());
// Debugger doesn't stop
Task.Run(async () => SyncOp());
// Debugger doesn't stop
Task.Run((Func<Task>)AsyncTaskOp);
// Debugger stops on "Wait()" with "AggregateException"
Task.Run(() => AsyncTaskOp().Wait());
// Throws "Exceptions was unhandled by user code" on "await"
Task.Run(() => AsyncVoidOp());
Thread.Sleep(2000);
}
static void SyncOp()
{
throw new Exception("Exception in sync method");
}
async static void AsyncVoidOp()
{
await AsyncTaskOp();
}
async static Task AsyncTaskOp()
{
await Task.Delay(300);
throw new Exception("Exception in async method");
}
}
_
何か不足していますか? AsyncTaskOp()
の例外でデバッガをブレーク/停止させるにはどうすればよいですか?
Debug
メニューで、Exceptions...
。 [例外]ダイアログの[Common Language Runtime Exceptions
行Thrown
ボックスをチェックします。
誰かがこの問題を回避する方法を見つけた場合、私は聞きたいですか?おそらく、最新のビジュアルスタジオの設定...?
厄介だが実行可能なソリューション(私の場合)は、独自のcustom Exceptionをスローし、Stephen Clearyの答えを修正することでした。
[デバッグ]メニューで[例外]を選択します(このキーボードショートカットを使用できます Control + Alt + E)... [例外]ダイアログで、[共通言語ランタイムの例外]行の横にある[スロー]ボックスをオンにします。
具体的には、リストにcustom Exceptionを追加し、[スロー]ボックスにチェックマークを付けます。
例えば:
async static Task AsyncTaskOp()
{
await Task.Delay(300);
throw new MyCustomException("Exception in async method");
}