關(guān)于C#異步之a(chǎn)sync await關(guān)鍵字

最近在研究Identity,很多示例代碼充斥著異步操作;而本身對(duì)async也不是身份了解,所以參考資料寫(xiě)了這么一篇小白文肢预;
稱之為小白文是當(dāng)之無(wú)愧的,因?yàn)榇宋膬H僅從現(xiàn)象觀察其本質(zhì)洼哎,沒(méi)有從里到外抽絲剝繭...

我們首先了解一下什么是阻塞和同步
  1. 阻塞烫映,非阻塞:進(jìn)程/線程是否需要等待;
    同步噩峦,異步:訪問(wèn)數(shù)據(jù)的方式锭沟,無(wú)論是同步或者異步 還是有可能阻塞當(dāng)前執(zhí)行的的子線程;只是異步方式不會(huì)阻塞主線程识补;
  • 有個(gè)小故事可能幫助理解

出場(chǎng)人物:老張族淮,水壺兩把(普通水壺,簡(jiǎn)稱水壺凭涂;會(huì)響的水壺祝辣,簡(jiǎn)稱響水壺)。
老張把水壺放到火上切油,立等水開(kāi)蝙斜。(同步阻塞)老張覺(jué)得自己有點(diǎn)傻
老張把水壺放到火上,去客廳看電視白翻,時(shí)不時(shí)去廚房看看水開(kāi)沒(méi)有乍炉。(同步非阻塞) 老張還是覺(jué)得自己有點(diǎn)傻,于是變高端了滤馍,買(mǎi)了把會(huì)響笛的那種水壺。水開(kāi)之后底循,能大聲發(fā)出嘀~~~~的噪音巢株。
老張把響水壺放到火上,立等水開(kāi)熙涤。(異步阻塞)老張覺(jué)得這樣傻等意義不大
老張把響水壺放到火上阁苞,去客廳看電視困檩,水壺響之前不再去看它了,響了再去拿壺那槽。(異步非阻塞)老張覺(jué)得自己聰明了悼沿。

了解這個(gè)后,我們回想編碼過(guò)程中骚灸,也存在很多類(lèi)似的問(wèn)題糟趾;我們之前一般都是通過(guò)直接操作線程來(lái)完成這步操作,但是操作比較麻煩 為此微軟大大在Freamwork 4.5 就簡(jiǎn)化了異步操作(具體時(shí)間記不得了)甚牲,使用關(guān)鍵字 Async和Await义郑;

支撐知識(shí)點(diǎn)

1.Task 關(guān)鍵字 微軟的解釋:簡(jiǎn)化編寫(xiě)并發(fā)和異步代碼的工作類(lèi)型;這個(gè)關(guān)鍵字感覺(jué)又可以開(kāi)一篇文章 我把鏈接放出來(lái)需要的可以自己看丈钙;

image.png

簡(jiǎn)單介紹一下Async和Await

異步方法一些約定

  1. 異步方法以Async結(jié)尾非驮;
    2.方法頭以async來(lái)修飾;
    3.必須包含至少一個(gè)await表達(dá)式雏赦;
    4.返回值類(lèi)型為 Task 或者Task<Result>


    image.png
不啰嗦直接上代碼:
  1. 異步方法沒(méi)有返回值
  class Program
    {
        static Stopwatch stopwatch = new Stopwatch();
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!;");
            AsyncTest asyncTest = new AsyncTest();
            for (int i = 0; i < 3; i++)
            {
                stopwatch.Start();
                var str = asyncTest.ActionAsync( );
                var str2 = asyncTest.ActionAsync2( );
                Action(str);
            }
            Console.ReadKey();
        }
        public static void Action(Task<int> str)
        {
            Console.WriteLine($"Thread:{Thread.GetCurrentProcessorId()};-----------------------------");
        }
    }
    public class AsyncTest
    {
        public int Num { get; set; }
        public int Num2 { get; set; }
        public async Task<int> ActionAsync()
        {
            Num++;
            Console.WriteLine(Num);
            HttpClient httpClient = new HttpClient();
            var str = await httpClient.GetStringAsync("https://www.baidu.com");
            Console.WriteLine($"Thread:{Thread.GetCurrentProcessorId()};;Length:{str.Length};Action:ActionAsync");
            return str.Length;
        }
        public async Task ActionAsync2()
        {
            Num2++;
            Console.WriteLine(Num2);
            HttpClient httpClient = new HttpClient();
            var str = await httpClient.GetStringAsync("https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.tasks?view=netcore-2.1");
            Console.WriteLine($"Thread:{Thread.GetCurrentProcessorId()};;Length:{str.Length};Action:ActionAsyn2");
        }
    }

執(zhí)行結(jié)果:


image.png
  1. 以上是執(zhí)行異步方法并沒(méi)有獲取異步方法的值劫笙;我們修改一下代碼,獲取異步方法的返回值
  public static void Action(Task<int> str)
        {
            Console.WriteLine($"Thread:{Thread.GetCurrentProcessorId()};Length:{str.Result}-----------------------------");
        }

執(zhí)行結(jié)果:


image.png
至此我們的async和await就先告一段落

我們從演示中也能看到星岗,如何使用這兩個(gè)關(guān)鍵字填大;至少我們知道如何使用了;

同時(shí)列出參考文章:
博客園
博客園2
博客園3

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末伍茄,一起剝皮案震驚了整個(gè)濱河市栋盹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌敷矫,老刑警劉巖例获,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異曹仗,居然都是意外死亡榨汤,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)怎茫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)收壕,“玉大人,你說(shuō)我怎么就攤上這事轨蛤∶巯埽” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵祥山,是天一觀的道長(zhǎng)圃验。 經(jīng)常有香客問(wèn)我,道長(zhǎng)缝呕,這世上最難降的妖魔是什么澳窑? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任斧散,我火速辦了婚禮,結(jié)果婚禮上摊聋,老公的妹妹穿的比我還像新娘鸡捐。我一直安慰自己,他們只是感情好麻裁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布箍镜。 她就那樣靜靜地躺著,像睡著了一般悲立。 火紅的嫁衣襯著肌膚如雪鹿寨。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,208評(píng)論 1 299
  • 那天薪夕,我揣著相機(jī)與錄音脚草,去河邊找鬼。 笑死原献,一個(gè)胖子當(dāng)著我的面吹牛馏慨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播姑隅,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼写隶,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了讲仰?” 一聲冷哼從身側(cè)響起慕趴,我...
    開(kāi)封第一講書(shū)人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鄙陡,沒(méi)想到半個(gè)月后冕房,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡趁矾,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年耙册,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片毫捣。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡详拙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蔓同,到底是詐尸還是另有隱情饶辙,我是刑警寧澤,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布斑粱,位于F島的核電站畸悬,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏珊佣。R本人自食惡果不足惜蹋宦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望咒锻。 院中可真熱鬧冷冗,春花似錦、人聲如沸惑艇。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)滨巴。三九已至思灌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間恭取,已是汗流浹背泰偿。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蜈垮,地道東北人耗跛。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像攒发,于是被迫代替她去往敵國(guó)和親调塌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 一.非阻塞和異步 借用知乎用戶嚴(yán)肅的回答在此總結(jié)下惠猿,同步和異步是針對(duì)消息通信機(jī)制羔砾,同步代表一個(gè)client發(fā)出一個(gè)...
    Daniel_adu閱讀 1,825評(píng)論 0 8
  • 關(guān)于C# async/await的一些說(shuō)明 下文以個(gè)人對(duì)async/await的理解為基礎(chǔ)進(jìn)行一些說(shuō)明。 1偶妖、自定...
    Huisama閱讀 21,517評(píng)論 2 58
  • 本文主要介紹了在 C# 中使用 Async 和 Await 關(guān)鍵字進(jìn)行異步編程的心得餐屎,是入門(mén)級(jí)的學(xué)習(xí)筆記檀葛。 題解:...
    BossOx閱讀 5,740評(píng)論 4 27
  • JS為什么是單線程的? 最初設(shè)計(jì)JS是用來(lái)在瀏覽器驗(yàn)證表單操控DOM元素的是一門(mén)腳本語(yǔ)言,如果js是多線程的那么兩...
    船長(zhǎng)___閱讀 2,198評(píng)論 1 15
  • 老張愛(ài)喝茶腹缩,廢話不說(shuō)屿聋,煮開(kāi)水。出場(chǎng)人物:老張藏鹊,水壺兩把(普通水壺润讥,簡(jiǎn)稱水壺;會(huì)響的水壺盘寡,簡(jiǎn)稱響水壺)楚殿。1 老張把水...
    sherrysack閱讀 216評(píng)論 0 0