【发布时间】:2017-06-08 11:41:51
【问题描述】:
我正在尝试从任务中实现异常处理,但我似乎无法正确处理。我找到了一些该模式的示例,但无论我尝试什么,我似乎总是从任务本身中获得未处理的异常。我一定错过了什么,但我看不到什么。任何帮助将不胜感激。
我尝试了一个在 MSDN 上找到的示例,但这对我不起作用:
https://msdn.microsoft.com/en-us/library/dd997415(v=vs.110).aspx
我遵循了这个问题的答案,但是当我在 Visual Studio 中运行修复程序时,它仍然抱怨未处理的异常:
这是我最初写的代码:
static void Main(string[] args)
{
TestAsync().ContinueWith(t =>
{
Console.WriteLine(t.Exception.ToString());
}, TaskContinuationOptions.OnlyOnFaulted);
Console.ReadKey();
}
static async Task<IEnumerable<string>> TestAsync()
{
IEnumerable<string> list = null;
try
{
list = await TestTask();
}
catch (Exception)
{
Console.WriteLine("Caught!");
}
return list;
}
static Task<IEnumerable<string>> TestTask()
{
var task = new Task<IEnumerable<string>>(() =>
{
throw new AggregateException("This is a test");
});
task.Start();
return task;
}
【问题讨论】:
-
我不完全清楚 - 你期望发生什么?我所看到的只是一个投掷、接球和重新投掷的路径。这将使异常未处理。
-
感谢您的回答。我希望 TestTask() 中引发的异常最终会出现在它返回的任务的 Exception 属性中,但是当我在 Visual Studio 中运行此示例时,它会突出显示 TestTask() 中的 throw 并说这是一个未处理的异常。我也很惊讶 MSDN 上的示例做了同样的事情。
-
我已经更新了示例代码,因此它显示了我想要做的更多。
标签: c# .net asynchronous async-await task