游戏开发者联盟

unity coroutine和async的区别

找到了如下ppt,看完就能知道双方的特性和各自优点:
https://www.slideshare.net/unity3d/best-practices-async-vs-coroutines-unite-copenhagen-2019

c# async await进阶:
微软的视频讲座,详细讲了用法,常见错误的正确用法,内部实现机制。
Correcting Common Async/Await Mistakes in .NET - Brandon Minnick

  1. 不要阻塞线程,使用await Task

    1. 不要使用Wait(),
    2. 不要使用GetWaiter().GetResult(),
  2. 可以减少上下文切换(从一个Task返回到主Task,会涉及队列、线程上下文切换,如果想省略,可以省略):

    1. 设置Task. ConfigureAwait(false):如何任务没有和特定线程绑定,比如主线程,UI线程,那么await之后可以不回到特定线程。
    2. 如果封装函数直接返回了底层函数的返回值,并且底层函数返回的也是Task,那么封装函数没必要使用async,可以直return 底层函数所给的Task。
      QQ图片20200902093247
  3. 不要创建方法:async void xxx();
    别人无法调用 await xxx();