iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 22
0
Modern Web

從Asp.Net MVC5的起跑點認識現代網站系列 第 22

Day22_Async Programming

處理緒

處理緒(Process)是一個系統層級用來描述一組資源和程式執行所需的記憶體分配。對於每一個被載入到記憶體的*.exe,在生命週期中,系統會建立一個單獨的處理緒。

執行緒

每一個處理緒都有一個用於進入程式的進入點的主執行緒(Main Thread)。換句話說,執行處理緒的第一個執行緒稱為主執行緒。

同步與非同步程式設計

如果一個作業大部分的時間都在等待某個條件的發生,稱為I/O Bound作業,如:網頁載入時所下載的CSS、JS和圖片等等,如果作業的時間都在用於執行CPU運算,那稱之為Compute Bound(=CPU Bound)。

同步程式設計

Synchronous再Longman字典的定義,「If two or more thing are synchronous,they happen at the same time or work at the same speed.」,意旨是一種有序或循序的執行流程。

如:程式執行流程由上而下,左而右的方式執行。
因為不同工作之間的處理速度不同,因此在多個工作之間必須協調彼此的進度,所以出現了「等待」時間,就像我們走路踏出左腳後,必須等右腳移動才能繼續往下一個動作執行一樣。

非同步程式設計

相對於同步,非同步意旨一種無序或平行的執行方式,再執行順序不影響結果的情況下,就能以平行執行的方式更快速得到結果,非同步處理作業在返回呼叫者之後才完成他的工作。

Task類別

屬於System.Thread.Task命名空間是.NET Framework 4.0所提供,作為工作平行程式庫(TPL)一部分,與Thread相比,Task是一個更為抽象的概念,他代表一個可透過或不透過執行緒實行的平行作業。

再asp.net mvc實作其實很快,只要再新增Controller的時候勾選
「使用非同步控制器」
http://ithelp.ithome.com.tw/upload/images/20170106/20103808d5InxlDkvV.png

即可自動產生非同步的Action
http://ithelp.ithome.com.tw/upload/images/20170106/20103808Qh1YoU29d5.png

async與await

前端常利用AJAX技術來減少畫面鎖定與回應的問題,但伺服器應用程式或是Mobile的APP越來越依賴向RESTful Web API來存取服務,但像大量的SQL語法運算、網路速度載入延遲等等問題依舊會造成等待時間導致鎖定問題。
再Method錢加上async修飾詞,此方法為非同步方法,特色為含async修飾詞、包含零到多個await結果、無await運算子只會發出警告,不影響城市建置與執行
無加的情況
public ActionResult Get()
有加Async
public async Task<ActionResult> Get()

回傳型別要修改為Task<TResult>,加入後必須了解幾件事:

  1. async修飾詞指示編譯氣將await視為一個關鍵字。
  2. async只能使用再回傳voidTaskTask<TResult>型別的方法上。

上一篇
Day21_Repository Pattern介紹
下一篇
Day23_NET Framework提供的診斷處理方式
系列文
從Asp.Net MVC5的起跑點認識現代網站30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言