unity C#异步和JS异步
- JS异步函数:async/await,在awaii处得到Promise(期约)的“完成”或“未完成”状态前暂停了异步函数,得到后恢复执行。
async a(){
let p = new Promise((resolve,reject) => {
setTimeout(resolve,1000,3);
})
console.log(await p);//3
}
相当于Unity的yield return new WaitForSeconds(1);
- UniTask
提供了类似的于JS的操作异步函数的一系列API,所有对异步函数的暂停和恢复执行,都可以用await UniTask…的形式代替(比如等待网页的报文、等待资源加载完成、或直接等待若干秒)。
using Cysharp.Threading.Tasks;
public class Demo{
async UniTask<string> demoAsync(){
var t = await Resources.LoasAsync<TextAsset>("foo");
await UniTask.Delay(TimeSpan.FromSeconds(10),
ignoreTimeScale:false);
return t?.text ?? throw InvalidOperationException("None");
}
}
C#新特性,运算符
?.
指当前者不为空时取得.
之后的属性。??
判空。但这两个运算符不要用在对"物体身上某组件是否为空“的判断上。