3 回答

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超8個(gè)贊
計(jì)算機(jī)一次出現(xiàn)多于一件事的唯一方法是(1)實(shí)際上一次做多于一件事,(2)通過調(diào)度任務(wù)和在它們之間切換來模擬它。因此,如果async-await沒有這些
這并不是說等待確實(shí)沒有這些的。請記住,目的await
不是使同步代碼神奇地異步。這是為了在調(diào)用異步代碼時(shí)使用我們用于編寫同步代碼的相同技術(shù)。等待是關(guān)于使用高延遲操作的代碼看起來像使用低延遲操作的代碼。這些高延遲操作可能在線程上,它們可能在特殊用途的硬件上,它們可能會(huì)將它們的工作分解成小塊并將其放入消息隊(duì)列中以供稍后由UI線程處理。他們正在做一些事情以實(shí)現(xiàn)異步,但他們是那些正在做的人。等待只是讓你利用這種異步。
另外,我認(rèn)為你缺少第三種選擇。我們老人們 - 今天有說唱音樂的孩子應(yīng)該從我的草坪上下來等 - 記住20世紀(jì)90年代早期的Windows世界。沒有多CPU機(jī)器也沒有線程調(diào)度程序。你想同時(shí)運(yùn)行兩個(gè)Windows應(yīng)用程序,你必須屈服。多任務(wù)是合作的。操作系統(tǒng)告訴進(jìn)程它會(huì)運(yùn)行,如果它不正常,它會(huì)使所有其他進(jìn)程無法服務(wù)。它一直運(yùn)行直到它產(chǎn)生,并且不知何故它必須知道如何在下次操作系統(tǒng)控制回到它時(shí)它停止的地方。單線程異步代碼非常類似,使用“await”而不是“yield”。等待的意思是“我要記住我在這里離開的地方,讓其他人跑了一會(huì)兒;當(dāng)我等待的任務(wù)完成時(shí),給我回電話,我會(huì)在我離開的地方接我。” 我認(rèn)為你可以看到它如何使應(yīng)用程序更具響應(yīng)性,就像在Windows 3天中一樣。
調(diào)用任何方法意味著等待方法完成
有你失蹤的鑰匙。 方法可以在其工作完成之前返回。這就是異步的本質(zhì)。一個(gè)方法返回,它返回一個(gè)任務(wù),意味著“這項(xiàng)工作正在進(jìn)行中;告訴我完成后該做什么”。該方法的工作尚未完成,即使它已經(jīng)返回。
在await運(yùn)算符之前,你必須編寫看起來像spaghetti穿過瑞士奶酪的代碼,以處理我們在完成后有工作要做的事實(shí),但返回和完成失去同步。Await允許您編寫看起來像返回和完成同步的代碼,而不會(huì)實(shí)際同步它們。
- 3 回答
- 0 關(guān)注
- 720 瀏覽
添加回答
舉報(bào)