我正在尝试从任务中实现异常处理,但我似乎无法做到正确。我已经找到了一些模式的例子,但无论我尝试什么,我似乎总是在任务本身内得到未处理的异常。我一定错过了什么,但我看不清楚。非常感谢任何帮助。
我尝试过在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;
}
答案 0 :(得分:2)
在VS中断后立即点击继续,你会看到它进入你的ContinueWith。它只是调试器的一个怪癖,因为它无法在代码中找到处理execption的try / catch。
如果您不希望调试器停止并向您显示消息,则需要禁用&#34; Just My Code&#34;在调试器选项中,以便生成Task
内的try / catch被计为捕获异常的东西。