unitask
示例
UniTask.Void(Push);
private async UniTaskVoid Push() {
await UniTask.SwitchToThreadPool();
Process.Start(gitPath, $"-C {projectPath} push")?.WaitForExit();
Debug.Log("Push success");
}
UniTask.Void(async () => {
GameUtil.OpenUIs<LoadingCanvas>();
AsyncOperation asyncLoad = SceneManager.LoadSceneAsync("Battle");
await UniTask.WaitUntil(() => asyncLoad.isDone);
var entryBattle = GameObject.FindFirstObjectByType<EntryBattle>();
entryBattle.LevelName = levelName;
});
await
不能 await 返回 async UniTaskVoid 的方法
UniTaskVoid 只用于最后一层 Unitask.Void(()=>UniTaskVoid), 所以用 Lambda 之后 UniTaskVoid 就不会出现了
要 await 返回 async UniTask 的方法
从主线程调用子线程
// Fire and Forget 不管异步返回值
Unitask.Void( 返回 UniTaskVoid)
UniTask.Void(async () => Push().Forget());
UniTask.Void(async () => await Push());
UniTask.Void(async () => { ... });
Push().Forget()
Unitask.Create( 返回 UniTask).Forget
Unitask 默认在主线程运行, 要切到子线程
await UniTask.SwitchToThreadPool();
其他资料
视频教程
最后更新于
这有帮助吗?