async ,await使用方法詳解

2021-10-01 09:51:33 字數 1832 閱讀 6558

以前工作中用的框架都是.net framework 4.0,最近因為一些原因開始接觸asp .net core 才接觸到async+await

簡直是發現新大陸啊,剛開始也在網上各大部落格平台尋找資料資料,大家的說法都有較大的偏差。只能我自己動手探索新大陸了,廢話不多說**先上。

首先我們先建立兩個非同步方法first_asyncsecond_async以及乙個同步方法other,用來模擬我們現實中的業務場景:

static

void

main

(string

args)

private

static

async task<

string

>

first_async()

public

static

string

other()

public

static

async task<

string

>

second_async()

);console.

writeline

("結束呼叫second_async方法"

+ datetime.now.

tostring

("yyyy-mm-dd hh:mm:ss"))

;return"";

}

ojbk,方法寫好了,我們來測試看看執行的結果:

細心的小夥伴們可能已經發現問題了,說好的非同步方法呢,怎麼跟想象中的不一樣(手動狗頭)。在我們定義的非同步方法first_async內先等待了other的響應才會返回main方法。以下是微軟官方的解釋:

await 運算子應用於非同步方法中的任務,在方法的執行中插入掛起點,直到所等待的任務完成。 任務表示正在進行的工作。

await 表示式不阻止正在執行它的執行緒。 而是使編譯器將剩下的非同步方法註冊為等待任務的延續任務。 控制權隨後會返回給非同步方法的呼叫方。 任務完成時,它會呼叫其延續任務,非同步方法的執行會在暫停的位置處恢復。

大概意思就是說就算方法內加了async後,我們建立的非同步方法也不會都進行非同步處理。帶async修飾的非同步方法是不會自動生成子執行緒進行非同步處理業務邏輯的,真正的非同步處理邏輯是我們的await task.run(() =>);。而await的作用是告訴上一級的方法,我這裡有乙個非同步的**塊需要處理,你自己去幹其他事情吧,後面的事情都不用你管了。然後就把主線程的控制權交回給上一級方法。

老規矩,上**,我們根據上面總結的內容巧妙的修改一下我們的程式如下:

private

static

async task<

string

>

first_async()

執行結果如下:

不出所料,主線程沒有再等待first_async的響應,直接繼續往下執行。至此新大陸被我們占領了,或者說新大陸的某個小海灘被我們占領了。(手動滑稽)

iOS UIAlertView的使用方法詳細

uialertview的常用方法 標準樣式 uialertview onealertview uialertview alloc initwithtitle 標題 message 提示內容 delegate self cancelbuttontitle 關閉 otherbuttontitles ok...

php函式addslashes 使用方法詳解

在每個雙引號 前新增反斜槓 str addslashes shanghai is the biggest city in china.echo str 執行例項 shanghai is the biggest city in china.addslashes 函式返回在預定義字元之前新增反斜槓的字串...

基於RestTemplate的使用方法 詳解

1.postforobject 傳程式設計客棧入乙個業務物件,返回是乙個string 呼叫方 baseuser baseuser new b程式設計客棧aseuser baseuser.setuserid userid baseuser.setpass pass string postforobje...