婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > .NET中基于事件的異步模式-EAP

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

熱門(mén)標(biāo)簽:外呼系統(tǒng)用員工身份證 保山電話外呼管理系統(tǒng)怎么用 使用智能電話機(jī)器人違法嗎 東莞語(yǔ)音電銷機(jī)器人排名 太原外呼電銷機(jī)器人費(fèi)用 淘寶地圖標(biāo)注如何做 電話機(jī)器人廣告話術(shù) 蘇州銷售外呼系統(tǒng)預(yù)算 朝陽(yáng)市地圖標(biāo)注
前言
在C# 5.0中,新增了async await 2個(gè)關(guān)鍵字支持異步編程的操作。在講述這兩個(gè)關(guān)鍵字之前,我先總結(jié)一下.NET中的常見(jiàn)的異步編程模型。
異步編程一直是比較復(fù)雜的問(wèn)題,其中要處理多線程之間的數(shù)據(jù)同步、獲取進(jìn)度、可取消、獲取結(jié)果、不影響主線程操作、多個(gè)任務(wù)之間互相不影響等,因此需要設(shè)計(jì)編程模型去處理此類問(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è)名為 “[方法名稱]Async” 的方法。這些方法可能會(huì)創(chuàng)建同步版本的鏡像,這些同步版本會(huì)在當(dāng)前線程上執(zhí)行相同的操作。
該類還可能有一個(gè) “[方法名稱]Completed” 事件,監(jiān)聽(tīng)異步方法的結(jié)果。
它可能會(huì)有一個(gè) “[方法名稱]AsyncCancel”(或只是 CancelAsync)方法,用于取消正在進(jìn)行的異步操作。
下面是一個(gè)符合此模式的類聲明示例
復(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 類有兩個(gè)方法,都支持同步和異步調(diào)用。同步重載的行為類似于方法調(diào)用,它們對(duì)調(diào)用線程執(zhí)行操作;如果操作很耗時(shí),則調(diào)用的返回可能會(huì)有明顯的延遲。異步重載將在另一個(gè)線程上啟動(dòng)操作,然后立即返回,允許在調(diào)用線程繼續(xù)執(zhí)行的同時(shí)讓操作“在后臺(tái)”執(zhí)行。
System.Net.WebClient 本身就有很多EAP的例子,以它的DownloadString為例,WebClient中跟DownloadString相關(guān)的方法有
DownloadString:同步下載字符串資源的方法,此方法阻塞當(dāng)前線程。
DownloadStringAsync:使用EAP異步編程模式下載字符串資源的方法,此方法不會(huì)阻塞當(dāng)前線程。
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
您可能感興趣的文章:
  • asp.net在事件中啟動(dòng)線程來(lái)打開(kāi)一個(gè)頁(yè)面的實(shí)現(xiàn)方法
  • asp.net頁(yè)面觸發(fā)事件panel滾動(dòng)條高度不變的實(shí)現(xiàn)方法
  • ASP.NET中實(shí)現(xiàn)定制自己的委托和事件參數(shù)類
  • .NET WinFrom中給文本框添加拖放事件的代碼
  • .net自定義事件示例分享
  • 詳解ASP.NET頁(yè)面生命周期事件
  • ASP.NET 頁(yè)面事件執(zhí)行順序介紹
  • .NET圖像界面按鈕的clicked事件淺談
  • .net,js捕捉文本框回車鍵事件的小例子(兼容多瀏覽器)
  • .Net WInform開(kāi)發(fā)筆記(五)關(guān)于事件Event
  • .NET事件監(jiān)聽(tīng)機(jī)制的局限與擴(kuò)展分析

標(biāo)簽:運(yùn)城 克拉瑪依 阿里 綏化 潛江 呼倫貝爾 西藏 洛陽(yáng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《.NET中基于事件的異步模式-EAP》,本文關(guān)鍵詞  .NET,中,基于,事件,的,異步,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《.NET中基于事件的異步模式-EAP》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于.NET中基于事件的異步模式-EAP的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 南皮县| 安新县| 普宁市| 东光县| 广南县| 根河市| 兴山县| 兴化市| 永登县| 达州市| 伊金霍洛旗| 宁德市| 中方县| 长泰县| 平定县| 阿瓦提县| 锡林郭勒盟| 嘉义市| 安化县| 温泉县| 丹寨县| 和龙市| 庆城县| 高阳县| 辽源市| 绥滨县| 黄陵县| 视频| 武夷山市| 广饶县| 邵阳县| 罗平县| 潞西市| 南雄市| 大连市| 长岛县| 南木林县| 平远县| 固安县| 安岳县| 玛多县|