非同步程式設計(基礎)

2022-09-19 12:21:12 字數 1800 閱讀 8514

1.非同步程式設計並不是多執行緒

2.非同步程式設計只是在io操作/cpu操作 將主線程切換出去執行其他操作,不阻塞主線程,從而提公升系統併發效能

3.非同步並不能提公升程式本身執行速度,只是能在同一時間點處理更多的任務。

舉個燒水的例子(如圖):

上圖說明。從開始燒水到水開 不管同步還是非同步,時間是相同的,只是人(主線程)在中途可以做更多的事情。

執行緒的切片也是需要開銷,如果當前沒有別的事情,只是燒水,還有必要非同步嗎?你覺得呢?

c#非同步程式設計語法

非同步程式設計方法用 async 修飾

1.返回值一般是taskt為返回值型別 返回值為空 則 返回 task

2.方法名後面標記為async(標明該方法為非同步方法)例子:httpgetstring(同步)   httpgetstringasync(非同步)   

3.獲取非同步方法的實際返回值在呼叫方法前加上await  例子: string str=await httpgetstringasync(非同步) ; 如果不加await 則返回值型別為 task則不等待直接開啟乙個tas**程執行改方法,可能改變方法執行順序

4.await 非同步非阻塞

static

async task main(string

args)

static

async task getnumasync(int

num)

return

result;

}

非同步方法有什麼好處?舉個例子:(winfrom程式)

//同步

private

void button1_click(object

sender, eventargs e)

//非同步

private

async

void button2_click(object

sender, eventargs e)

可以對比兩個按鈕點選後 是否可以拖動主窗體。  這就是主線程阻塞的乙個簡單例子,在winform和wpf中經常出現介面卡死,一般是因為沒有採用非同步

非同步程式設計原理:

在await期間  系統會把當前執行緒返回執行緒池。等非同步方法結束後在從執行緒池取出乙個執行緒來繼續執行後面的**。

例子(獲取當前執行緒id):

using

system.text;

//同步

static

void writetext(int

num) }

//非同步

static task writetextasync(int

num)

console.writeline(

"非同步doing

從上例也可以看出 非同步方法裡的執行並沒有在新的執行緒中執行,而是在執行完後,由另外的執行緒來繼續執行後面的**。

非同步程式設計基礎

本質上適合非同步的操作有 http請求,資料庫指令,web服務呼叫等。1 暫停一段時間 以非同步方式 以非同步的方式暫停一段時間,這在進行單元測試或者重試延遲時非常有用。task類有乙個返回task物件的靜態函式delay,下面是其中的乙個 public static task delay time...

C 非同步程式設計基礎(七)非同步原理

參考資料 c 非同步程式設計基礎 一 執行緒和阻塞 c 非同步程式設計基礎 二 執行緒安全 向執行緒傳遞資料和異常處理 c 非同步程式設計基礎 三 執行緒優先順序 訊號和執行緒池 c 非同步程式設計基礎 四 富客戶端應用程式的執行緒 和 同步上下文 synchronization contexts ...

C 基礎學習 非同步程式設計篇

net framework 為非同步操作提供了兩種設計模式 使用 iasyncresult 物件的非同步操作與使用事件的非同步操作。先來學習前者 bitscn.net 中國網管部落格 概述 bitscn.com iasyncresult 非同步設計模式通過名為 beginoperationname ...