请问关于c的具体应用场景有哪些?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1195个文字,预计阅读时间需要5分钟。
在当前面讲到了《基于任务的异步编程模式(TAP)》,但若直接调用异步方法而不进行等待,那么在调用异步方法的线程中使用传统的try/catch块是无法捕获到异步方法中的异常的。因为异步方法中抛出的异常是在另一个线程中处理的。
在前面讲到了《基于任务的异步编程模式(TAP)》,但是如果调用异步方法,没有等待,那么调用异步方法的线程中使用传统的try/catch块是不能捕获到异步方法中的异常。因为在异步方法执行出现异常之前,已经执行完毕。
1、没有等待的调用异步方法
ThrowAfter方法是在一定延迟后抛出一个异常:
private async Task ThrowAfter(int ms,string message) { await Task.Delay(ms); Console.WriteLine("异步任务随后将抛出异常。"); throw new Exception(message); }
DontHandle方法在调用异步方法时,由于有滞后性,所以使用try...catch...不能捕获到异步方法中的异常。
public void DontHandle() { try { ThrowAfter(200, "异步方法抛出的异常"); } catch(Exception ex) { Console.WriteLine(ex.Message); } Console.WriteLine("完成方法:DontHandle"); }
注意:返回void的异步方法不会等待。因为从async void方法抛出的异常无法捕获。因此,异步方法最好返回一个Task类型。
本文共计1195个文字,预计阅读时间需要5分钟。
在当前面讲到了《基于任务的异步编程模式(TAP)》,但若直接调用异步方法而不进行等待,那么在调用异步方法的线程中使用传统的try/catch块是无法捕获到异步方法中的异常的。因为异步方法中抛出的异常是在另一个线程中处理的。
在前面讲到了《基于任务的异步编程模式(TAP)》,但是如果调用异步方法,没有等待,那么调用异步方法的线程中使用传统的try/catch块是不能捕获到异步方法中的异常。因为在异步方法执行出现异常之前,已经执行完毕。
1、没有等待的调用异步方法
ThrowAfter方法是在一定延迟后抛出一个异常:
private async Task ThrowAfter(int ms,string message) { await Task.Delay(ms); Console.WriteLine("异步任务随后将抛出异常。"); throw new Exception(message); }
DontHandle方法在调用异步方法时,由于有滞后性,所以使用try...catch...不能捕获到异步方法中的异常。
public void DontHandle() { try { ThrowAfter(200, "异步方法抛出的异常"); } catch(Exception ex) { Console.WriteLine(ex.Message); } Console.WriteLine("完成方法:DontHandle"); }
注意:返回void的异步方法不会等待。因为从async void方法抛出的异常无法捕获。因此,异步方法最好返回一个Task类型。

