激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - .NET中基于事件的異步模式-EAP

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

2019-10-15 10:42C#技術網 ASP.NET教程

從.NET 4.5開始,支持的三種異步編程模式:基于事件的異步編程設計模式、異步編程模型、基于任務的編程模型,感興趣的朋友可以參考下

前言 
在C# 5.0中,新增了async await 2個關鍵字支持異步編程的操作。在講述這兩個關鍵字之前,我先總結一下.NET中的常見的異步編程模型。 
異步編程一直是比較復雜的問題,其中要處理多線程之間的數據同步、獲取進度、可取消、獲取結果、不影響主線程操作、多個任務之間互相不影響等,因此需要設計編程模型去處理此類問題。 

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

基于事件的異步模式 - EAP 
EAP的編程模式的代碼有以下特點: 
將有一個或多個名為 “[方法名稱]Async” 的方法。這些方法可能會創建同步版本的鏡像,這些同步版本會在當前線程上執行相同的操作。 
該類還可能有一個 “[方法名稱]Completed” 事件,監聽異步方法的結果。 
它可能會有一個 “[方法名稱]AsyncCancel”(或只是 CancelAsync)方法,用于取消正在進行的異步操作。 
下面是一個符合此模式的類聲明示例 

復制代碼代碼如下:


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. 


這里虛構的 AsyncExample 類有兩個方法,都支持同步和異步調用。同步重載的行為類似于方法調用,它們對調用線程執行操作;如果操作很耗時,則調用的返回可能會有明顯的延遲。異步重載將在另一個線程上啟動操作,然后立即返回,允許在調用線程繼續執行的同時讓操作“在后臺”執行。 
System.Net.WebClient 本身就有很多EAP的例子,以它的DownloadString為例,WebClient中跟DownloadString相關的方法有: 
DownloadString:同步下載字符串資源的方法,此方法阻塞當前線程。 
DownloadStringAsync:使用EAP異步編程模式下載字符串資源的方法,此方法不會阻塞當前線程。 
DownloadStringCompleted:響應異步下載時完成的事件。 
DownloadProgressChanged:響應異步下載時進度變化。 
調用模型示例如下: 

復制代碼代碼如下:


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"); 
//測試網址 
string url = "http://sports.163.com/nba/"; 
using (WebClient webClient = new WebClient()) { 
//監控下載進度 
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(webClient_DownloadProgressChanged); 
//監控完成情況 
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) 

//出現異常,就記錄異常 
log += "|error=" + e.Error.Message; 

else { 
//沒有出現異常,則記錄結果 
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()); 



運行結果: 
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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精国产品一区二区三区四季综 | 欧美日韩高清一区二区三区 | 久久久婷婷 | 欧美性视频一区二区 | av在线免费看片 | 污视频在线免费播放 | 最新av在线播放 | 黄色毛片免费视频 | 久久777国产线看观看精品 | 色妞视频男女视频 | 在线天堂资源 | 精品久久久久久久久久久久久 | 羞羞色在线观看 | 欧美日本免费一区二区三区 | 久久91亚洲精品久久91综合 | 久久精品亚洲一区二区三区观看模式 | 欧美成人免费看 | av在线播放免费观看 | 亚洲成人免费网站 | 久久精品国产一区二区电影 | 91短视频在线观看视频 | 日本欧美一区二区三区在线播 | 久久久久久久久久久久免费 | 97黄色网 | 日本黄色大片免费观看 | 日日草夜夜 | www.99tv | 最新一级毛片 | 国产美女视频一区二区三区 | 日韩黄色影视 | 性爱免费视频 | 国产精品久久久久久久久久妇女 | 国产99久久久国产精品 | 国产精品久久久免费 | 久久丝袜脚交足黄网站免费 | 精品久久久久久久久久久aⅴ | 九九热九九爱 | 视频一区二区在线观看 | sese在线视频 | 久久久久性视频 | 极品五月天 |