#筆記:C# 非同步處理

Jia
Oct 26, 2020

--

2020.10.26

前言:非同步處理在前端相當常見,如利用Ajax向後端請求資料就是採取非同步的方式,今天第一次接觸到後端的非同步請求的學習,但對於後端來說是非常基本的。

一般的同步處理,當後端接到一則請求,請求到控制器,再由控制器調用資料庫以求取資料,將資料送回控制器,在送還給使用者,當處理完這整個流程,才會處理第二個請求。當每秒請求高達幾千甚至幾萬,光是排隊等伺服器回應就得花上許多時間,這是不科學的,在百萬級請求伺服器會採用:

非同步處理+每個機器多進程+多買幾台機器來解決。

K8s,kubernetes容器化分布式部屬

C#的非同步 async/await

同步方法:程式調用某個方法,需要等待執行完每一行後才能執行下一行的操作,這是許多程式語言預設的執行方法。

非同步方法:程式調用某個方法時,不做任何等待,在處理完成之前就返回該方法,繼續執行接下來的操作。

非同步控制流程

  1. 非同步方法
  2. 調用非同步方法

await(非同步等待)表達式在於修飾需要執行非同步方法,一個async方法中可以包含多個await。

使用async修飾字後,會改變函式結構,返回類型也會發生改變(void、Task、Task<T>、IAsyncEnumerable)

async和await沒有因果關係,async決定返回類型。

總結

  1. 在函數申明當中,async申明要放在返回類型之前。
  2. async申明只代表函數中可能會包含非同步操作,並不會創造非同步操作,只有在調用await的時候才會進行非同步的操作。
  3. async是一個上下文關鍵字,享用調用一個async函數,自己必須也是async函數
  4. async返回類型:void、Task、Task<T>、IAsyncEnumerable<T>。

--

--

Jia
Jia

Written by Jia

看一次不懂 就看兩次吧。每一天努力一點,不知不覺就會成為想像中的樣子的。 like60955@gmail.com