我在VS2013中创建了一个新的Silverlight 5项目并添加了Microsoft Async(1.0.168)NuGet包。然后我创建了一个简单的异步事件处理程序如下:在Silverlight 5中使用异步时,堆栈跟踪不提供异常源方法
private async void OnButtonClick(object sender, RoutedEventArgs e)
{
await AsyncMethod();
}
private static async Task AsyncMethod()
{
await TaskEx.Run(() => { });
NormalMethod();
}
private static void NormalMethod()
{
throw new Exception("test exception");
}
当我按一下按钮,我得到以下异常:
{System.Exception: test exception
at Microsoft.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at Microsoft.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccess(Task task)
at Microsoft.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
at Microsoft.Runtime.CompilerServices.TaskAwaiter.GetResult()
at SilverlightApplication1.MainPage.<OnButtonClick>d__0.MoveNext()}
的信息在这里失踪的关键部分,我想进行调试时异常的源方法(即NormalMethod)。
我已经回顾了一些相关的问题(链接如下),并认为我理解异步对堆栈跟踪的影响,但我不明白为什么框架不会以维护知识的方式抛出异常的源方法。有关如何简单获取此信息的任何想法/建议?
相关问题:
Missing exception stack trace informations when using Async Targeting Pack in Silverlight 5.0
Is it possible to get a good stack trace with .NET async methods?
感谢您的回复@Eli。回复较晚,抱歉。我放弃了在我正在开发的项目中使用异步。我只是在我的问题中概述的简单场景中尝试了你的要点,现在确实在异常详细信息中提供了源方法的详细信息。尽管如此,我还没有做过任何进一步的测试。 – Chris 2015-10-23 00:01:30