之前對於同步方法和使用async、await的非同步方法一直很迷惑。我覺得等待執行結果的非同步和同步方法有什麼區別嗎?他們的執行順序都是一樣的啊? 不是都需要等待執行結果嗎?今天翻了一下《C#高級編程》,才算搞清楚這裡面的差異,原來使用了async、await的非同步是不會阻塞線程的。 首先說說關於同步方 ...
之前對於同步方法和使用async、await的非同步方法一直很迷惑。我覺得等待執行結果的非同步和同步方法有什麼區別嗎?他們的執行順序都是一樣的啊?
不是都需要等待執行結果嗎?今天翻了一下《C#高級編程》,才算搞清楚這裡面的差異,原來使用了async、await的非同步是不會阻塞線程的。
首先說說關於同步方法和非同步方法的區別。比如說web網站載入一些網路資源,是使用同步方法請求,那麼此時web網站的用戶界面將會阻塞,
直到該方法完成對資源的網路調用,並完成結果分析。完成這些調用所需的時間取決與網路速度,以及伺服器當前的工作量。對於用戶來說,界面卡掉、一段時間的等待都是不愉快的。
所以使用非同步調用。非同步可以避免阻塞,在此期間可以做更多的事情。但是非同步有一個缺陷,相對於同步來說,它對於程式的流程充滿了不確定性,順序可能會顛倒。
所以在某些場景,比如說有多個非同步方法被調用,他們是有依賴關係的,後面的非同步方法需要使用到之前非同步方法的結果,我們需要按順序調用這些非同步方法,
這個時候就需要使用async、await關鍵字來等待執行的結果,但是它不會阻塞線程。