翻譯自一篇博文,原文:Dissecting the async methods in C#
異步系列
C#這門語言對開發者的生產效率有很大幫助,我很高興最近的推動讓它變得對高性能應用更加合適。
舉例來說:C# 5引入了“async”方法(async表示異步,也是關鍵字)。這個特性從用戶的角度看是很實用的,因爲它能將幾個基於Task的操作合併爲一個。但是這種抽象是需要代價的。Task是引用類型,每次實例化的時候都會造成堆上的內存分配,就算是“async”方法同步地執行完畢的情況下也不例外。有了C# 7,在某些場景下,異步方法可以返回類似Task的類型,比如ValueTask,來減少或避免在堆上的內存分配。
爲了理解如何將上述一切變爲可能,我們需要看看異步方法在底層是如何實現的。
但首先,先來回顧一點歷史。