asp论坛网站源码,推广普通话手抄报内容资料,h5网页设计软件,如何建立自己的网站去推广、如果调用两个异步方法#xff0c;每个都会抛出异常#xff0c;该如何处理呢 ? 在下面的示例中#xff0c;第一个 ThrowAfter 方法被调用#xff0c;2s 后抛出异常(含消息 first)。该方法结束后#xff0c;另一个 ThrowAfter 方法也被调用#xff0c;1s 后也抛出异常。… 、如果调用两个异步方法每个都会抛出异常该如何处理呢 ? 在下面的示例中第一个 ThrowAfter 方法被调用2s 后抛出异常(含消息 first)。该方法结束后另一个 ThrowAfter 方法也被调用1s 后也抛出异常。事实并非如此因为对第一个 ThrowAfter 方法的调用已经抛出了异常try 块内的代码没有继续调用第二个 ThrowAfter 方法而是在 catch 块内对第一个异常进行处理。代码如下private static async void StartTwoTasks()
{try{await ThrowAfter(2000, first);await ThrowAfter(1000, second); // the second call is not invoked// because the first method throws// an exception}catch (Exception ex){Console.WriteLine($handled {ex.Message});}
}现在并行调用这两个 ThrowAfter 方法。第一个 ThrowAfter 方法 2s 后抛出异常1s 后第二个 ThrowAfter 方法也抛出异常。使用 Task.WhenAll不管任务是否抛出异常都会等到两个任务完成。因此等待 2s 后 Task.WhenAll 结束异常被 catch 语句捕获到。但是只能看见传递给 WhenAll 方法的第一个任务的异常信息没有显示先抛出异常的任务(第二个任务)但该任务也在列表中代码如下private async static void StartTwoTasksParallel()
{try{Task tl ThrowAfter(2000, first);Task t2 ThrowAfter(1000, second);await Task.WhenAll(tl, t2);}catch (Exception ex){// just display the exception information of the first task// that is awaited within whenAllConsole.WriteLine(Shandled {ex.Message});}
}有一种方式可以获取所有任务的异常信息就是在 try 块外声明任务变量 t1 和t2使它们可以在 catch 块内访问。在这里可以使用 IsFaulted 属性检查任务的状态以确认它们是否为出错状态。若出现异常IsFaulted 属性会返回true。可以使用 Task 类的 Exception.InnerException 访问异常信息本身。