この質問は、たとえば次のように、以前に数回尋ねられたため、報奨金で担当者を無駄にしたようです。
私が思い出すことができるように、賞金はほとんどありませんでしたが、参照よりもはるかに進んでいませんでした:
または、このSOの質問で:
への回答を参照して:
別の同様の SO の質問:
Daniel Moth による Visual Studio 2010 のParallel Debugging (Parallel Stacks, Parallel Tasks) に関する参照のコレクションが非常に役立つことがわかりました。
アップデート:
コードを実行した
using System;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Foo();
}
public static async void Foo()
{
await Bar();
}
public static async Task Bar()
{
try
{
//async SomethingToMakeThisMethodAsync();
//to make this async
await TaskEx.Delay(2000);//await Task.Delay(2000);//in .NET 4.5
throw new Exception();
}
catch (Exception)
{
throw new Exception("This is Excptn in Bar() method");
}
}
}
}
VS2010 + Async CTP デバッグ モード (F5) では、「This is Excptn in Bar() method」という識別例外メッセージがはっきりと表示されます。
いずれにせよ、追加のマーキング (カスタム メッセージによる例外のキャッチと再スロー) がなくても、スタック トレース (ローカル ウィンドウ) でConsoleApplication1.Program.< Bar > として識別されます。つまり、上記のコードで Bar() メソッドを次のように置き換えています。
public static async Task Bar()
{
//async SomethingToMakeThisMethodAsync();
//to make this async
await TaskEx.Delay(2000);//await Task.Delay(2000);//in .NET 4.5
throw new Exception();
}
例外がスローされたことをスタック トレースで確認しますConsoleApplication1.Program.<Bar>
。
+ $exception
{System.Exception: Exception of type 'System.Exception' was thrown.
Server stack trace:
at ConsoleApplication1.Program.<Bar>d__3.MoveNext() in R:\###Debugging\#seUnmangling (pre .NET 4.5) asyncawait stack traces\AsyncConsole_Sln\1Cons_Prj\Program.cs:line 29
Exception rethrown at [0]:
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at ConsoleApplication1.Program.<Foo>d__0.MoveNext() in R:\###Debugging\#seUnmangling (pre .NET 4.5) asyncawait stack traces\AsyncConsole_Sln\1Cons_Prj\Program.cs:line 19
Exception rethrown at [1]:
at System.Runtime.CompilerServices.AsyncVoidMethodBuilder.<SetException>b__1(Object state)
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()} System.Exception