3
How the heck does async/await work in Python 3.5? (www.snarky.ca)
whitglint 積分 0

是說 C# async/await 更妙。

changyuheng 積分 0

願聞其詳?

whitglint 積分 3

不擅表達,簡單講一下跟 Python 不同之處:

  1. 語言原生支援(由 compiler 把 async method 轉成 state machine 改變執行方式)。比起 generator + decorator 更直覺更不容易寫錯,我常忘記加 decorator 或是有多個 decorator 時不知要加在第幾個,而 async 或 await 沒寫就是編譯錯誤。

  2. 方便利用多個核心。Caller 遇到必須等待的 task 就先離開,之後根據 SynchronizationContext 決定由哪個 thread 繼續執行 await 之後的程式,可以是 UI thread 也可以是 thread pool 裡的 thread。

  3. Event loop 不是必要的。GUI 程式才需要利用 event loop 繼續執行 async method。

感想:用過 async/await 後真的無法再回去寫 callback hell 和 promise 什麼的了... XD

whitglint 積分 0

只有用過 Tornado,覺得這種 coroutine/generator 的 async/await 滿不錯的。