是一个高性能,0GC的async/await异步方案
协程缺点:
依赖monobehaviour
不能进行异常处理
方法返回值获取困难
c#原生Task:
优点:
不依赖monobehaviour
可以处理异常
缺点:
Task消耗大,设计跨线程操作
uniTask
优点:
继承c#的task优点
基于值类型解决方案,0GC
默认使用主协程
https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask
延时操作:Delay DelayFrame Yield NextFrame WaitForEndOfFrame
等待操作: Wait Until Wait Until Value Changed
条件操作: When All When Any
异步委托生成UniTask及相关的封装: UniTask.Void UniTask.Defer UniTask.Lazy
取消:CancellationToken GetCancellationTokenOnDeatory()
异常处理:Try Catch SuppressCancellationThrow
超时处理:取消的变种,通过 CancellationTokenSouce.CancelAfterSlim(TimeSpan)设置超时并将CancellationToken 传递给异步方法
Forget()
事件处理:
1.异步事件 Lamaba 表达式注册 使用 UniTask.Action 或 UniTask.UnityAction
2.UGUI 事件转换为可等待事件
AsAsyncEnumerable
3.MonoBehaviour 消息事件都可以转换异步流
异步Linq
异步迭代器
响应式组件
协程和task
void Start()
{
StartCoroutine(waitting());
}
Ienumerator waitting()
{
yield r