2 回答

TA貢獻(xiàn)1770條經(jīng)驗(yàn) 獲得超3個(gè)贊
你已經(jīng)完成了async整個(gè)Update()方法。
async void Update()
{//whatever needs to be done in a frame}
渲染Update方法異步運(yùn)行,這樣 Unity 就不會等待它返回就繼續(xù)執(zhí)行。它繼續(xù)調(diào)用Update()所有其他對象,執(zhí)行其操作,渲染幀,直到async void Update()在同一對象上的下一幀上達(dá)到相同的效果。所以,它可以反應(yīng)
if (Input.GetKey(KeyCode.A))
{
player.transform.Translate(new Vector3(-1,0,0) * Time.deltaTime);
}
在后一幀上,即使前一幀Update()正在等待await Task.Delay(3000). 這就是您獲得結(jié)果的原因。
順便說一句,async void Update()恕我直言,這是一個(gè)壞主意,因?yàn)楫?dāng)各種Update()方法在意外的時(shí)間返回不同的值并在意外的時(shí)間修改變量時(shí),您會得到意外的結(jié)果。我會保持Update()同步,并最終讓它調(diào)用一個(gè)async可以滿足您需要的方法。

TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個(gè)贊
異步編程并使用基于任務(wù)的異步模式 (TAP)
基于 .NET 任務(wù)的異步模型由 Task 和 Task 類型以及 C# 中的 async 和await 關(guān)鍵字公開
我意識到理解這些文檔并不總是那么容易;所以基本上發(fā)生的情況是,當(dāng)您await
在方法中時(shí),返回值在調(diào)用中“保留”?await Update()
。一旦等待完成,調(diào)用者將收到該值,這將在調(diào)用樹中向上級聯(lián)。
重要的是每個(gè)單獨(dú)的方法調(diào)用都變得異步。我認(rèn)為它就像你給員工的工作卡。你可以不斷地給他們新卡,每次他們完成工作時(shí),他們都會把卡還給你,你就做你必須做的事。員工可能會選擇先做簡單的事情,這樣您很可能會以不同的順序取回卡片,但這并不重要。
- 2 回答
- 0 關(guān)注
- 277 瀏覽
添加回答
舉報(bào)