最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

.NET中基于事件的異步模式-EAP

 更新時(shí)間:2013年01月02日 09:41:57   作者:  
從.NET 4.5開(kāi)始,支持的三種異步編程模式:基于事件的異步編程設(shè)計(jì)模式、異步編程模型、基于任務(wù)的編程模型,感興趣的朋友可以參考下
前言
在C# 5.0中,新增了async await 2個(gè)關(guān)鍵字支持異步編程的操作。在講述這兩個(gè)關(guān)鍵字之前,我先總結(jié)一下.NET中的常見(jiàn)的異步編程模型。
異步編程一直是比較復(fù)雜的問(wèn)題,其中要處理多線(xiàn)程之間的數(shù)據(jù)同步、獲取進(jìn)度、可取消、獲取結(jié)果、不影響主線(xiàn)程操作、多個(gè)任務(wù)之間互相不影響等,因此需要設(shè)計(jì)編程模型去處理此類(lèi)問(wèn)題。

從.NET 4.5開(kāi)始,支持的三種異步編程模式
基于事件的異步編程設(shè)計(jì)模式 (EAP,Event-based Asynchronous Pattern)
異步編程模型(APE,Asynchronous Programming Model)
基于任務(wù)的編程模型(TAP,Task-based Asynchronous Pattern)
目前新版的.NET是偏向于建議使用TAP方式進(jìn)行異步編程,WINRT中的異步操作就只有TAP的身影,async await關(guān)鍵字也只是支持TAP的編程模型。

基于事件的異步模式 - EAP
EAP的編程模式的代碼有以下特點(diǎn):
將有一個(gè)或多個(gè)名為 “[方法名稱(chēng)]Async” 的方法。這些方法可能會(huì)創(chuàng)建同步版本的鏡像,這些同步版本會(huì)在當(dāng)前線(xiàn)程上執(zhí)行相同的操作。
該類(lèi)還可能有一個(gè) “[方法名稱(chēng)]Completed” 事件,監(jiān)聽(tīng)異步方法的結(jié)果。
它可能會(huì)有一個(gè) “[方法名稱(chēng)]AsyncCancel”(或只是 CancelAsync)方法,用于取消正在進(jìn)行的異步操作。
下面是一個(gè)符合此模式的類(lèi)聲明示例
復(fù)制代碼 代碼如下:

public class AsyncExample
{
// Synchronous methods.
public int Method1(string param);
public void Method2(double param);
// Asynchronous methods.
public void Method1Async(string param);
public void Method1Async(string param, object userState);
public event Method1CompletedEventHandler Method1Completed;
public void Method2Async(double param);
public void Method2Async(double param, object userState);
public event Method2CompletedEventHandler Method2Completed;
public void CancelAsync(object userState);
public bool IsBusy { get; }
// Class implementation not shown.
}

這里虛構(gòu)的 AsyncExample 類(lèi)有兩個(gè)方法,都支持同步和異步調(diào)用。同步重載的行為類(lèi)似于方法調(diào)用,它們對(duì)調(diào)用線(xiàn)程執(zhí)行操作;如果操作很耗時(shí),則調(diào)用的返回可能會(huì)有明顯的延遲。異步重載將在另一個(gè)線(xiàn)程上啟動(dòng)操作,然后立即返回,允許在調(diào)用線(xiàn)程繼續(xù)執(zhí)行的同時(shí)讓操作“在后臺(tái)”執(zhí)行。
System.Net.WebClient 本身就有很多EAP的例子,以它的DownloadString為例,WebClient中跟DownloadString相關(guān)的方法有
DownloadString:同步下載字符串資源的方法,此方法阻塞當(dāng)前線(xiàn)程。
DownloadStringAsync:使用EAP異步編程模式下載字符串資源的方法,此方法不會(huì)阻塞當(dāng)前線(xiàn)程。
DownloadStringCompleted:響應(yīng)異步下載時(shí)完成的事件。
DownloadProgressChanged:響應(yīng)異步下載時(shí)進(jìn)度變化。
調(diào)用模型示例如下
復(fù)制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
namespace AsyncTest1.EAP
{
public class EAPRunTest1
{
public static void AsyncRun() {
Utility.Log("AsyncRun:start");
//測(cè)試網(wǎng)址
string url = "http://sports.163.com/nba/";
using (WebClient webClient = new WebClient()) {
//監(jiān)控下載進(jìn)度
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(webClient_DownloadProgressChanged);
//監(jiān)控完成情況
webClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(webClient_DownloadStringCompleted);
webClient.DownloadStringAsync(new Uri(url));
Utility.Log("AsyncRun:download_start");
}
}
static void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
string log = "AsyncRun:download_completed";
log += "|cancel=" + e.Cancelled.ToString() ;
if (e.Error != null)
{
//出現(xiàn)異常,就記錄異常
log += "|error=" + e.Error.Message;
}
else {
//沒(méi)有出現(xiàn)異常,則記錄結(jié)果
log += "|result_size=" + Utility.GetStrLen(e.Result);
}
Utility.Log(log);
}
static void webClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
Utility.Log("AsyncRun:download_progress|percent=" + e.ProgressPercentage.ToString());
}
}
}

運(yùn)行結(jié)果
2012-12-28 00:39:39:621 AsyncRun:start
2012-12-28 00:39:40:377 AsyncRun:download_start
2012-12-28 00:39:40:903 AsyncRun:download_progress|percent=1
2012-12-28 00:39:40:933 AsyncRun:download_progress|percent=3
2012-12-28 00:39:40:933 AsyncRun:download_progress|percent=5
2012-12-28 00:39:40:934 AsyncRun:download_progress|percent=5
2012-12-28 00:39:40:975 AsyncRun:download_progress|percent=9
2012-12-28 00:39:41:068 AsyncRun:download_progress|percent=21
2012-12-28 00:39:41:131 AsyncRun:download_progress|percent=29
2012-12-28 00:39:41:182 AsyncRun:download_progress|percent=37
2012-12-28 00:39:41:298 AsyncRun:download_progress|percent=50
2012-12-28 00:39:41:354 AsyncRun:download_progress|percent=58
2012-12-28 00:39:41:447 AsyncRun:download_progress|percent=74
2012-12-28 00:39:41:489 AsyncRun:download_progress|percent=82
2012-12-28 00:39:41:582 AsyncRun:download_progress|percent=100
2012-12-28 00:39:41:582 AsyncRun:download_progress|percent=100
2012-12-28 00:39:41:614 AsyncRun:download_completed|cancel=False|result_size=205568

相關(guān)文章

  • .NET中函數(shù)Main的使用技巧

    .NET中函數(shù)Main的使用技巧

    任何語(yǔ)言開(kāi)發(fā)出來(lái)的程序,都會(huì)有一個(gè)程序入口函數(shù),可能每個(gè)語(yǔ)言所使用的程序入口函數(shù)名稱(chēng)不一樣,但是它們的作用都是一樣的,都是被操作系統(tǒng)去調(diào)用。那么本文主要總結(jié).NET中的程序入口函數(shù)Main使用的小技巧。
    2016-10-10
  • asp.net獲取真實(shí)ip的方法

    asp.net獲取真實(shí)ip的方法

    這篇文章主要介紹了asp.net獲取真實(shí)ip的方法,通過(guò)一個(gè)簡(jiǎn)單的自定義函數(shù)達(dá)到獲取用戶(hù)真實(shí)IP的功能,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下
    2015-07-07
  • 使用asp.net調(diào)用谷歌地圖api示例

    使用asp.net調(diào)用谷歌地圖api示例

    這篇文章主要介紹了asp.net調(diào)用谷歌地圖api的過(guò)程,需要注意js引入的先后順序,需要的朋友可以參考下
    2014-08-08
  • 使用asp.net MVC4中的Bundle遇到的問(wèn)題及解決辦法分享

    使用asp.net MVC4中的Bundle遇到的問(wèn)題及解決辦法分享

    這篇文章主要介紹了使用asp.net MVC4中的Bundle遇到的問(wèn)題及解決辦法,需要的朋友可以參考下
    2014-02-02
  • .NET/C#利用反射調(diào)用含ref或out參數(shù)的方法示例代碼

    .NET/C#利用反射調(diào)用含ref或out參數(shù)的方法示例代碼

    這篇文章主要給大家介紹了關(guān)于.NET/C#利用反射調(diào)用含ref或out參數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • asp.net實(shí)現(xiàn)文件無(wú)刷新上傳方法匯總

    asp.net實(shí)現(xiàn)文件無(wú)刷新上傳方法匯總

    本文給大家介紹的是asp.net實(shí)現(xiàn)文件無(wú)刷新上傳的2種方法,分別是使用swfupload插件和uploadify插件,講述的十分細(xì)致全面,附上示例,有需要的小伙伴可以參考下。
    2015-06-06
  • Entity?Framework使用Code?First的實(shí)體繼承模式

    Entity?Framework使用Code?First的實(shí)體繼承模式

    本文詳細(xì)講解了Entity?Framework使用Code?First的實(shí)體繼承模式,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • .Net集成敏感詞組件的步驟

    .Net集成敏感詞組件的步驟

    現(xiàn)如今大部分服務(wù)都會(huì)有用戶(hù)輸入,為了服務(wù)的正常運(yùn)行,很多時(shí)候不得不針對(duì)輸入進(jìn)行敏感詞的檢測(cè)、替換。如果人工做這樣的工作,不僅效率低,成本也高。水弟在這里寫(xiě)了一個(gè)讓小編姐姐都覺(jué)得快的敏感詞組件接入示例,不需要依賴(lài)第三方服務(wù),只需兩分鐘即可享受清爽文字。
    2021-05-05
  • datatable行轉(zhuǎn)列示例分享

    datatable行轉(zhuǎn)列示例分享

    這篇文章主要介紹了datatable行轉(zhuǎn)列示例,指定需要轉(zhuǎn)換的表和轉(zhuǎn)換表表頭對(duì)應(yīng)舊表字段就可以轉(zhuǎn)換了
    2014-01-01
  • asp.net網(wǎng)站防惡意刷新的Cookies與Session解決方法

    asp.net網(wǎng)站防惡意刷新的Cookies與Session解決方法

    這篇文章主要介紹了asp.net網(wǎng)站防惡意刷新的Cookies與Session解決方法,分別以實(shí)例的形式講述了采用cookie法與session法實(shí)現(xiàn)WEB頁(yè)面防止惡意刷新的技巧,需要的朋友可以參考下
    2014-09-09

最新評(píng)論

长顺县| 凤冈县| 蒲城县| 古蔺县| 东港市| 海安县| 简阳市| 赤壁市| 榕江县| 日土县| 额敏县| 西乌| 黎川县| 犍为县| 黑河市| 莱州市| 玉田县| 蓝山县| 宣恩县| 兖州市| 封开县| 治县。| 海原县| 彝良县| 西昌市| 平顺县| 龙江县| 湘乡市| 甘泉县| 凉城县| 吉安市| 兴安县| 阿尔山市| 开封县| 枣庄市| 伊宁县| 怀仁县| 静安区| 德兴市| 东平县| 卫辉市|