UniTask 学习笔记
视频:精选Unity-Github开源库分享 最完美的异步操作解决方案 UniTask (一)简介
视频作者:B站游戏石匠super
【目前笔记没有足够完善,等待后续更新······】
update/LateUpdate等
·逻辑复杂,容易出错
·Update中代码太多,牵一发动全身
·会引入很多成员变量,增加代码复杂度
·必须依托于monobehaviour
协程
· 消耗大 每次创建协程都会有新的GC
·无法进行异常处理
·必须依托于monobehavior
替代方案async/await Task
优点
·
缺点
·Task消耗也不小,涉及到线程调度,相当重。
·Task是跨线程,不符合unity引擎设计
UniTask 如何使用
提出疑问______________________________
1、什么是await
答:首先,UniTask使用笔记,
先知道,####同步异步,
同步处理:代码按顺序执行,在方法1中调用方法2是,要等到方法2执行完毕才接着执行方法1的代码。
异步处理:简单来说就是两个方法里的代码同时或者来回调用,在方法1里调用方法2,时,不等方法2执行完毕就接着执行下面代码。
async/await 和Task
在某个地方,比如方法A中,调用这个函数,然后,不等这个协程执行完,就继续执行方法A
`//协程版等待一秒
IEnumerator DelayCoroutine()
{
Debug.Log("Start");
yield return new WaitForSeconds(1f); //等待1秒
Debug.Log("End");
}
`
//Async版 等待一秒 async void DelayTask() { Debug.Log("Start"); await Task.Delay(1000); //等待1秒 Debug.Log("End"); }
async 和 await
如果使用 async 修饰符将某种方法指定为异步方法,即启用以下两种功能。
标记的异步方法可以使用 await 来指定暂停点。 await 运算符通知编译器异步方法:在等待的异步过程完成后才能继续通过该点。 同时,控制返回至异步方法的调用方。
异步方法在 await 表达式执行时暂停并不构成方法退出,只会导致 finally 代码块不运行。
标记的异步方法本身可以通过调用它的方法等待。
异步方法通常包含 await 运算符的一个或多个实例,但缺少 await 表达式也不会导致生成编译器错误。 如果异步方法未使用 await 运算符标记暂停点,则该方法会作为同步方法执行,即使有 async 修饰符,也不例外。 编译器将为此类方法发布一个警告。
Delay
Delay 等待一段时间 或者等待多少帧,或者是等待到某个时机,
通过PlayerLoop.GetCurrentPlayerLoop(); 获取unity本身的PlayerLoop,这样可以得到unity的更新内容(运行时Subsystem)