C#async/await心得

结论:

  1. 异步方法的方法签名要加 async,否则就算返回 Task<T> 也是普通方法。
  2. 调用异步方法,可以加 await 或不加 await
    • 不加 await 得到的是 Task<T> 对象,得等异步执行完成,才能拿到T对象(废话:)。当前方法签名不必有 async。
    • 加 await 得到的是 T 对象。当前方法自身会马上返回,被调用方法异步执行完成后再把T对象返回给当前方法,继续往下执行当前方法的剩余代码。当前方法签名必须有 async。
  3. async 方法中执行到第1个await前。是主线程执行的(同步执行的),第1个await后代码是新线程执行的(异步执行的)。如果被调用的异步方法内部也调用其它的异步方法,也是这样的执行规则。即递归作用。
    • 如果await中循环中,则是第1次执行到await代码。
  4. Task.Wait()方法会在当前线程等待指定的task线程结束后再返回。并可以通过 Task.Result获取结果。
    (本文 2019-7首发,2023-3作了修改,对容易误解之处作了展开说明)
posted @ 2019-07-31 19:45  BillySir  阅读(362)  评论(0编辑  收藏  举报