私はthis article on MSDNを研究しましたが、このトピックに関してはまだいくつかの質問/回答がありますが、以下のコードがうまくいかない理由がわかりません(サンプルコンソールアプリ)。デバッガでタスクの例外を処理する方法は?
MSDNによると、hello
メッセージの内部例外が1つ含まれるAggregateExceptionがスローされることが予想されます。代わりに、このhello
例外は処理されません。これはデバッガの内部で発生します。
[続行]を押すか、スタンドアロンで実行すると、正常に動作します。 VSのすべての時間を続けることを避ける方法はありますか?結局、Try...Catch
ブロック内にあるものはすべて、と扱われ、単一のスレッドプログラミングモデルでとみなされます。さもなければ、デバッグは悪夢になるかもしれません。
VB.NET
Sub Main()
Try
Task.Factory.StartNew(AddressOf TaskThatThrowsException).Wait()
Catch ex As AggregateException
Console.WriteLine(ex.ToString) 'does not get here until you hit Continue
End Try
End Sub
Private Sub TaskThatThrowsException()
Throw New Exception("hello") 'exception was unhandled
End Sub
C#
namespace ConsoleApplication1 {
class Program {
static void Main(string[] args) {
try {
Task.Factory.StartNew(TaskThatThrowsException).Wait();
}
catch (AggregateException ex) {
Console.WriteLine(ex.ToString()); //never gets here
}
}
static void TaskThatThrowsException() {
throw new Exception("hello"); //exception was unhandled
}
}
}
明らかに何かがあります私はここで行方不明ですか?
はすべての例外で停止するデバッガーを設定します。それはどこで止まるのですか? 'TaskThatThrowsException'と' Wait'で停止する必要があります。 – usr
@usr:今でも 'Throw New Exception(" hello ")'行で停止していても、スローされたすべてをチェックするとそれが改善されません。私はそれを止めず、むしろConsole.WriteLineを処理したいと思います。さもなければ、デバッグは悪夢になるかもしれません。 – Neolisk
タスクの例外はStartNewには表示されず、.Wait()でのみ表示されます。 Dim myTask = Task.Factory.StartNew(...)MyTask.Wait()を試す... – adrianm