1. 引言

最近在學(xué)習(xí)Abp框架,發(fā)現(xiàn)Abp框架的很多Api都提供了同步異步兩種寫法。異步編程說起來,大家可能都會說異步編程性能好。但好在哪里,引入了什么問題,以及如何使用,想必也未必能答的上來。
自己對異步編程也不是很了解,今天就以學(xué)習(xí)的目的,來梳理下同步異步編程的基礎(chǔ)知識,然后再來介紹下如何使用async/await進(jìn)行異步編程。下圖是一張大綱,具體可查看腦圖分享鏈接

2. 同步異步編程

同步編程是對于單線程來說的,就像我們編寫的控制臺程序,以main方法為入口,順序執(zhí)行我們編寫的代碼。
異步編程是對于多線程來說的,通過創(chuàng)建不同線程來實(shí)現(xiàn)多個(gè)任務(wù)的并行執(zhí)行。

3. 線程

.Net 1.0就發(fā)布了System.Threading,其中提供了許多類型(比如Thread、ThreadStart等)可以顯示的創(chuàng)建線程。
說到Thread,我們需要了解以下幾個(gè)概念:

3.1. 什么是主線程

每一個(gè)Windows進(jìn)程都恰好包含一個(gè)用作程序入口點(diǎn)的主線程。進(jìn)程的入口點(diǎn)創(chuàng)建的第一個(gè)線程被稱為主線程。.Net執(zhí)行程序(控制臺、Windows Form、Wpf等)使用Main()方法作為程序入口點(diǎn)。當(dāng)調(diào)用該方法時(shí),主線程被創(chuàng)建。

3.2. 什么是工作者線程

由主線程創(chuàng)建的線程,可以稱為工作者線程,用來去執(zhí)行某項(xiàng)具體的任務(wù)。