C#中Async和Await用法总结

    1、await和.Result获取返回结果有何不同?
    答:得到的结果没有不同,但是.Result 在某种情况下会造成死锁。
    await 时是释放线程,线程能去执行其它任务;.Result 就是让线程暂停,等待结果。
    尽量不要用.Result

    2、await和task.wait有何不同?
    答:两者都是等待返回task执行完的结果,比如都返回string,而不是task<string>,但是wait会阻塞当前线程,await不会阻塞当前线程


    主调用方法执行到await的时候,Task如果已经完成,则会返回一个已完成状态的Task对象,并且继续执行await的下一条语句,就像同步一样。

主调用方法执行到await的时候,Task如果还未完成,编译器把await后面的语句生成delegate,写入相应的状态信息。直到任务完成,会有一个SynchronizationContext类恢复delegate运行的情境到await之前的样子(控制台是没有SynchronizationContext的)。

一定要等候任务的执行结果,否则有异常也不会抛出来。

尽量不要使用void作为异步方法的返回值,无法catch异常。

Task.Wait()、Task.Result等候Task执行完毕,才往下跑,但是会让当前线程阻塞。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值