中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

C#~異步編程續~.net4.5主推(tui)的await&async應用

返回目錄

之前寫過兩篇關于異步編程的文章,詳細可以進入C#~異步編程C#~異步編程在項目中的使用

.net的(de)各(ge)個版本都有自(zi)己主推(tui)的(de)技術,像.NET1.1中(zhong)(zhong)的(de)委(wei)托,.NET2.0中(zhong)(zhong)的(de)泛(fan)型,.NET3.0中(zhong)(zhong)的(de)Linq,.NET4.0中(zhong)(zhong)的(de)Dynimac,而在(zai)(zai).NET4.5中(zhong)(zhong)主要(yao)推(tui)出的(de)是異步編(bian)程,而實現異步編(bian)程的(de)簡單方(fang)(fang)式(shi)就是使用await和async關(guan)鍵字(zi),而在(zai)(zai)新的(de).net托管類(lei)庫(ku)中(zhong)(zhong)已經(jing)大(da)大(da)使用了(le)這兩個關(guan)鍵字(zi),我們(men)在(zai)(zai)vs2010添(tian)加(jia)補丁和vs2012中(zhong)(zhong)都可以使用它(ta),在(zai)(zai)微軟(ruan)的(de)戰場上,我們(men)從(cong)來沒有見(jian)過(guo)異步編(bian)程這樣(yang)盛行過(guo),在(zai)(zai)推(tui)出.net4.5后,所以需要(yao)進(jin)行異步的(de)方(fang)(fang)法,都被實現了(le)同步和異步的(de)兩個版本,這給開發人員以大(da)大(da)的(de)方(fang)(fang)便!

下面舉(ju)出(chu)兩個例子來(lai)再次說明一個await和async的使用方法

一 將遠程圖像進行獲取,然后在瀏覽器上進行響應

#region 異步返回文件流(提高應用程序的吞吐能力)
        public async Task<ActionResult> AwaitFile()
        {
            var responseHtml = await GetResponseStream("//static.xuexiba.com/uploadfile/UserInfo/Avatar/201311/1302844759237319155175.jpg");
            return File(responseHtml, "image/jpeg");
        }

        private async Task<Stream> GetResponseStream(string url)
        {
            return await GetResponseContentAsync(url);
        }

        private async Task<Stream> GetResponseContentAsync(string url)
        {
            var httpClient = new System.Net.Http.HttpClient();
            var response = await httpClient.GetAsync(url);
            if (response.StatusCode == System.Net.HttpStatusCode.OK)
            {
                return await response.Content.ReadAsStreamAsync();
            }
            else
            {
                return null;//error
            }
        }

        #endregion

 二 將遠程HTML文件進行獲取,然后在瀏覽器上進行響應

#region 異步返回文本(提高應用程序的吞吐能力)

        public async Task<ActionResult> AwaitHtml()
        {
            var responseHtml = await GetResponseHtml("//www.sina.com");
            return Content(responseHtml);
        }

        private async Task<string> GetResponseHtml(string url)
        {
            return await GetResponseStringAsync(url);
        }

        private async Task<string> GetResponseStringAsync(string url)
        {
            var httpClient = new System.Net.Http.HttpClient();
            var response = await httpClient.GetAsync(url);
            if (response.StatusCode == System.Net.HttpStatusCode.OK)
            {
                return await response.Content.ReadAsStringAsync();//加await的意思(si)是說,主UI等(deng)待它執行(xing)(xing)完成后(hou),再繼續執行(xing)(xing),這種就叫(jiao)作并行(xing)(xing)!
            }
            else
            {
                return null;//error
            }
        }
        #endregion

而(er)(er)在運(yun)(yun)(yun)行后,我(wo)們可以(yi)看到,它(ta)被正常的(de)(de)(de)輸(shu)出了,而(er)(er)在它(ta)運(yun)(yun)(yun)行的(de)(de)(de)背后,我(wo)們可能(neng)并(bing)不清楚,它(ta)實(shi)現上不是(shi)在WWW主線程(cheng)上運(yun)(yun)(yun)行的(de)(de)(de),而(er)(er)是(shi)異步開啟了新的(de)(de)(de)線程(cheng)來做(zuo)的(de)(de)(de)這事,這才是(shi)重要的(de)(de)(de),它(ta)這樣做(zuo)的(de)(de)(de)目的(de)(de)(de)只有一個,那就是(shi)搞高(gao)WWW的(de)(de)(de)響應(ying)能(neng)力,即提高(gao)它(ta)的(de)(de)(de)程(cheng)序(xu)的(de)(de)(de)吞吐(tu)量!

返回目錄

posted @ 2014-09-04 13:21  張占嶺  閱讀(18289)  評論(1)    收藏  舉報