第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

Unity3d中的“await”如何不阻塞?

Unity3d中的“await”如何不阻塞?

C#
隔江千里 2023-08-20 15:39:46
這是我的代碼using System;using System.Collections;using System.Threading.Tasks;using UnityEngine;public class NewMonoBehaviour : MonoBehaviour{    // Start is called before the first frame update    [SerializeField]    GameObject player;    void Start()    {    }    // Update is called once per frame    async void Update()    {        if (Input.GetKeyDown("space"))        {            Debug.Log("Start");            await Task.Delay(3000);            Debug.Log("End");        }        if (Input.GetKey(KeyCode.A))        {            player.transform.Translate(new Vector3(-1,0,0) * Time.deltaTime);        }        if (Input.GetKey(KeyCode.D))        {            player.transform.Translate(new Vector3(1,0,0) * Time.deltaTime);        }    }}當(dāng)我按下空格鍵時(shí),即使延遲尚未結(jié)束,我也可以左右移動。此外,我可以反復(fù)按空格鍵以獲得StartStartStartEndEndEnd這就像我想要的那樣,但我想了解為什么。我想這個(gè)方法中的所有內(nèi)容都會被阻止,直到 Task.Delay 完成。
查看完整描述

2 回答

?
德瑪西亞99

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可以滿足您需要的方法。


查看完整回答
反對 回復(fù) 2023-08-20
?
精慕HU

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í),他們都會把卡還給你,你就做你必須做的事。員工可能會選擇先做簡單的事情,這樣您很可能會以不同的順序取回卡片,但這并不重要。


查看完整回答
反對 回復(fù) 2023-08-20
  • 2 回答
  • 0 關(guān)注
  • 277 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號