一項新技術或者一個新特性,隻有你用它解決實際問題後,才能真正體會到它的魅力,真正了解它。也期待大家能夠多分享解一些解決實際問題的内容。
今天早上在将一個MVC Controller中的Action改為異步的時候突然發現——其中有7個方法調用可以并行執行。
如果通過async/await實作了這7個方法的并行,性能将會提高幾倍,真是一個意外的驚喜!
驚喜之後,則要面對這樣一個問題——如何以最低的成本實作?
這7個方法其他地方也在調用,不想直接把這些方法改為異步的;即使可以改為異步的,也不想一路改到底,最後在資料通路層調用ADO.NET的異步方法。
。。。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuATNjdDM4EWY3YjM4MjY3QGNxE2NwADNyMGO1ITNyYGZfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
好帥的圖!連執行順序都标得清清楚楚。隻要照着這張圖,就可以輕松地用async/await實作并行。
需要注意的地方:
1)并行調用的目标方法必須是async的。
2)在并行期間,不能使用await。
以下是實作案例:
下面的代碼是需要并行執行的7個方法中的2個:
由于并行調用的目标方法必須是async的,并且我們不想修改原有的方法實作代碼,是以我們增加2個async方法中轉一下:
async方法1:
async方法2:
然後在調用代碼中,分别調用這2個async方法讓其并行執行,之後再用await取執行結果。
真的很簡單,很輕松! async/await果然好用!