C# 使用Task.WhenAll()时,如何捕获任务中发生的异常?
我试着在任务周围放置try-catch。whalll(任务),但它什么都没有捕获。在我的一个任务中,我试图通过在空字符串上使用子字符串来人工生成异常。但发生的一切是应用程序崩溃,并默认为应用程序未处理异常C# 使用Task.WhenAll()时,如何捕获任务中发生的异常?,c#,.net,windows-phone-8,C#,.net,Windows Phone 8,我试着在任务周围放置try-catch。whalll(任务),但它什么都没有捕获。在我的一个任务中,我试图通过在空字符串上使用子字符串来人工生成异常。但发生的一切是应用程序崩溃,并默认为应用程序未处理异常 private async void RunTasks() { tasks[0] = HttpExtensions.GetMyData("http://www...."); tasks[1] = HttpExtensions.GetMyDat
private async void RunTasks()
{
tasks[0] = HttpExtensions.GetMyData("http://www....");
tasks[1] = HttpExtensions.GetMyData("http://www.....");
tasks[2] = GeoLocate.OneShotGeoLocate();
try
{
await Task.WhenAll(tasks);
}
catch (AggregateException ae)
{
App.ViewModel.ErrorMessage = ae.Message;
}
}
这要归功于“nakiya”
private async void RunTasks()
{
tasks[0] = HttpExtensions.GetMyData("http://www....");
tasks[1] = HttpExtensions.GetMyData("http://www.....");
tasks[2] = GeoLocate.OneShotGeoLocate();
try
{
await Task.WhenAll(tasks);
}
catch (Exception ae)
{
App.ViewModel.ErrorMessage = ae.Message;
}
}
要获取执行任务时引发的所有异常,请使用以下命令:
Task taskReturned = Task.WhenAll(taskArray);
try
{
await taskReturned;
}
catch
{
throw taskReturned.Exception;
}
除非这是一个事件处理程序,
RunTasks
是一个事件处理程序,否则永远不要使用async void
?如果它不是一个事件处理程序,它应该是异步任务
。这是一个时间问题吗?(即)您是否在代码有机会到达try块之前抛出异常?尝试将Try
块移动到任务创建之外。您是否尝试捕获异常
而不是聚合异常
?哦,它在异常情况下工作!谢谢