网站建设要哪些工作,江门营销型网站建设,陕西手机网站建设,wordpress制作评论模板在使用异步方法时#xff0c;应该知道错误的一些特殊处理方式。所有 ErrorHandling 示例的代码都使用了如下名称空间#xff1a;SystemSystem.Threading.Tasks从一个简单的方法开始#xff0c;它在延迟后抛出一个异常#xff1a;static async Task ThrowAfter(int ms, stri… 在使用异步方法时应该知道错误的一些特殊处理方式。所有 ErrorHandling 示例的代码都使用了如下名称空间SystemSystem.Threading.Tasks从一个简单的方法开始它在延迟后抛出一个异常static async Task ThrowAfter(int ms, string message)
{await Task.Delay(ms);throw new Exception(message);
}如果调用异步方法并且没有等待可以将异步方法放在 try/catch 块中就会捕获不到异常。这是因为 DontHandle 方法在 ThrowAfter 抛出异常之前已经执行完毕。需要等待 ThrowAfter 方法如下一节的示例所示。注意这个代码片段不会抛出异常:private static void DontHandle()
{try{ThrowAfter(200, first);// exception is not caught because this method is finished// before the exception is thrown}catch (Exception ex){Console.WriteLine(ex.Message);}
}警告返回 void 的异步方法不会等待。这是因为从 async void 方法抛出的异常无法捕获。因此异步方法最好返回一个 Task 类型。处理程序方法或重写的基类方法不受此规则限制。异步方法异常的一个较好处理方式是使用 await 关键字将其放在 try/catch 语句中如以下代码块所示。异步调用 ThrowAfter 方法后HandleOneError 方法就会释放线程但它会在任务完成时保持任务的引用。此时(2s 后抛出异常)会调用匹配的catch 块内的代码private static async void HandleOneError()
{try{await ThrowAfter(2000, first);}catch (Exception ex){Console.WriteLine($handled {ex.Message});}
}