C#5.0中async和await關(guān)鍵字的用法

這篇文章主要介紹了C#5.0中async和await關(guān)鍵字的用法,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

成都創(chuàng)新互聯(lián)專注于綏江企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè),商城網(wǎng)站制作。綏江網(wǎng)站建設(shè)公司,為綏江等地區(qū)提供建站服務(wù)。全流程按需求定制網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

C# 5.0引入了兩個(gè)關(guān)鍵字 async和await,這兩個(gè)關(guān)鍵字在很大程度上幫助我們簡(jiǎn)化了異步編程的實(shí)現(xiàn)代碼,而且TPL中的task與async和await有很大的關(guān)系

private async void button1_Click(object sender, EventArgs e)
        {
            var length = AccessWebAsync();

            // 這里可以做一些不依賴回復(fù)的操作
            OtherWork();

            this.textBox1.Text += String.Format("\n 回復(fù)的字節(jié)長(zhǎng)度為:  {0}.\r\n", await length);
            this.textBox2.Text = Thread.CurrentThread.ManagedThreadId.ToString();
        }

        private async Task<long> AccessWebAsync()
        {
            MemoryStream content = new MemoryStream();

            // 對(duì)MSDN發(fā)起一個(gè)Web請(qǐng)求
            HttpWebRequest webRequest = WebRequest.Create("http://msdn.microsoft.com/zh-cn/") as HttpWebRequest;
            if (webRequest != null)
            {
                // 返回回復(fù)結(jié)果
                using (WebResponse response = await webRequest.GetResponseAsync())
                {
                    using (Stream responseStream = response.GetResponseStream())
                    {
                        await responseStream.CopyToAsync(content);
                    }
                }
            }

            this.textBox3.Text = Thread.CurrentThread.ManagedThreadId.ToString();
            return content.Length;
        }

        private void OtherWork()
        {
            this.textBox1.Text += "\r\n等待服務(wù)器回復(fù)中.................\n";
        }

async是同步執(zhí)行程序,而await起到的則是劃分片段以及掛起調(diào)用方的作用,并不會(huì)創(chuàng)建新的線程,根據(jù)大神的分析:

在await關(guān)鍵字出現(xiàn)的前面部分代碼和后面部分代碼都是同步執(zhí)行的(即在調(diào)用線程上執(zhí)行的,也就是GUI線程,所以不存在跨線程訪問控件的問題),await關(guān)鍵處的代碼片段是在線程池線程上執(zhí)行。

在上面的代碼中,調(diào)用了FCL封裝的GetResponseAsync等方法從而不阻塞當(dāng)前UI線程,await的確不會(huì)創(chuàng)建新的線程,但是就在這里而言,await表達(dá)式中的確創(chuàng)建了新的線程——GetResponseAsync所做的.以至于造成了表面同步的假象。我之前寫過一篇文章
C#async與await異步編程學(xué)習(xí)筆記

await關(guān)鍵字與Task有莫大的關(guān)聯(lián),從其特定的返回值就可以看出來,更深層次的await與task的continuewith函數(shù)應(yīng)該是等效的.因此,用async & await關(guān)鍵字實(shí)現(xiàn)異步要么調(diào)用FCL封裝好的異步方法。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“C#5.0中async和await關(guān)鍵字的用法”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!

標(biāo)題名稱:C#5.0中async和await關(guān)鍵字的用法
文章來源:http://muchs.cn/article12/ihgggc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、網(wǎng)站維護(hù)用戶體驗(yàn)、微信公眾號(hào)、網(wǎng)站設(shè)計(jì)公司、靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計(jì)公司