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();

其他资料

视频教程

最后更新于

这有帮助吗?