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)

posted @ 2022-07-16 18:37  专心Coding的程侠  阅读(1827)  评论(2编辑  收藏  举报