成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#委托的同步調用和異步調用

開發 后端
我們這里將介紹的是C#委托的同步調用和異步調用,希望本文能對大家了解委托有所幫助。

對于C#委托我們談的比較多,在此談論的是C#委托中的同步調用和異步調用,希望本文的實例能給大家平時的工作有所幫助。

C#委托的Invoke方法用來進行同步調用。同步調用也可以叫阻塞調用,它將阻塞當前線程,然后執行調用,調用完畢后再繼續向下進行。

同步調用的例子:

  1. using System;  
  2. using System.Threading;  
  3. public delegate int AddHandler(int a, int b);  
  4.  
  5. public class Foo {  
  6.  static void Main() {  
  7.   Console.WriteLine("**********SyncInvokeTest**************");  
  8.   AddHandler handler = new AddHandler(Add);  
  9.   int result = handler.Invoke(1,2);  
  10.   Console.WriteLine("Do other work... ... ...");  
  11.   Console.WriteLine(result);  
  12.   Console.ReadLine();  
  13.  }  
  14.    
  15.  static int Add(int a, int b) {  
  16.   Console.WriteLine("Computing "+a+" + "+b+" ...");  
  17.   Thread.Sleep(3000);  
  18.   Console.WriteLine("Computing Complete.");  
  19.   return a+b;  
  20.  }  

運行結果:

  1. **********SyncInvokeTest**************  
  2. Computing 1 + 2 ...  
  3. Computing Complete.  
  4. Do other work... ... ...  

同步調用會阻塞線程,如果是要調用一項繁重的工作(如大量IO操作),可能會讓程序停頓很長時間,造成糟糕的用戶體驗,這時候異步調用就很有必要了。異步調用不阻塞線程,而是把調用塞到線程池中,程序主線程或UI線程可以繼續執行。委托的異步調用通過BeginInvoke和EndInvoke來實現。

異步調用:

  1. using System;  
  2. using System.Threading;  
  3.  
  4. public delegate int AddHandler(int a, int b);  
  5.  
  6. public class Foo {  
  7.  static void Main() {  
  8.   Console.WriteLine("**********AsyncInvokeTest**************");  
  9.   AddHandler handler = new AddHandler(Add);  
  10.   IAsyncResult result = handler.BeginInvoke(1,2,null,null);  
  11.   Console.WriteLine("Do other work... ... ...");  
  12.   Console.WriteLine(handler.EndInvoke(result));  
  13.   Console.ReadLine();  
  14.  }  
  15.    
  16.  static int Add(int a, int b) {  
  17.   Console.WriteLine("Computing "+a+" + "+b+" ...");  
  18.   Thread.Sleep(3000);  
  19.   Console.WriteLine("Computing Complete.");  
  20.   return a+b;  
  21.  }  

運行結果:

  1.  **********AsyncInvokeTest**************  
  2. Do other work... ... ...  
  3. Computing 1 + 2 ...  
  4. Computing Complete.  
  5. 3   


可以看到,主線程并沒有等待,而是直接向下運行了。

但是問題依然存在,當主線程運行到EndInvoke時,如果這時調用沒有結束(這種情況很可能出現),這時為了等待調用結果,線程依舊會被阻塞。

解決的辦法是用回調函數,當調用結束時會自動調用回調函數

回調異步:

  1. public class Foo {  
  2.  static void Main() {  
  3.   Console.WriteLine("**********AsyncInvokeTest**************");  
  4.   AddHandler handler = new AddHandler(Add);  
  5.   IAsyncResult result = handler.BeginInvoke(1,2,new AsyncCallback(AddComplete),"AsycState:OK");  
  6.   Console.WriteLine("Do other work... ... ...");  
  7.   Console.ReadLine();  
  8.  }  
  9.    
  10.  static int Add(int a, int b) {  
  11.   Console.WriteLine("Computing "+a+" + "+b+" ...");  
  12.   Thread.Sleep(3000);  
  13.   Console.WriteLine("Computing Complete.");  
  14.   return a+b;  
  15.  }  
  16.    
  17.  static void AddComplete(IAsyncResult result) {  
  18.   AddHandler handler = (AddHandler)((AsyncResult)result).AsyncDelegate;  
  19.   Console.WriteLine(handler.EndInvoke(result));  
  20.   Console.WriteLine(result.AsyncState);  
  21.  }  

原文標題:C#委托的同步調用和異步調用

鏈接:http://www.cnblogs.com/yinhu435/archive/2009/10/19/1585958.html

【編輯推薦】

  1. C#數組基礎介紹與操作詳解
  2. 淺析C#數組初始化性能測試
  3. C#數組操作詳細剖析
  4. 淺析C#數組操作方法
  5. C#數組和串操作經驗總結
責任編輯:彭凡 來源: 博客園
相關推薦

2009-08-21 11:24:16

C#異步調用

2009-08-21 11:02:55

C#異步調用

2009-08-20 19:08:30

C#異步調用

2009-08-21 13:18:25

C#異步調用

2009-12-21 14:10:26

WCF異步調用

2009-11-09 10:50:30

WCF異步調用

2009-07-01 14:31:01

JavaScript異

2009-07-01 13:58:00

JavaScript異

2009-11-06 15:54:15

WCF異步調用

2009-07-01 14:37:14

JavaScript異

2009-07-01 14:23:46

JavaScript異

2009-08-17 16:49:46

C#多線程控制

2021-03-29 09:26:44

SpringBoot異步調用@Async

2021-01-28 11:40:34

Dubbo異步配置

2010-02-22 13:28:05

WCF異步調用

2009-07-01 14:05:23

JavaScript異

2009-12-07 14:35:42

WCF異步調用

2010-01-11 17:24:19

VB.NET異步調用

2011-03-02 08:57:22

jQueryJavaScript

2012-10-29 10:59:27

Windows 8
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线观看你懂的网站 | 免费看国产一级特黄aaaa大片 | 日日网| 99久久久无码国产精品 | 亚洲欧美日韩一区 | 天天干精品 | 日韩欧美国产精品综合嫩v 一区中文字幕 | 美国一级黄色片 | 成人在线视频网站 | 久久久国产亚洲精品 | 中文二区 | www.日韩系列| 欧洲精品在线观看 | 91精产国品一二三区 | 日韩在线观看网站 | 亚洲在线一区二区 | 久久精品屋 | 成人免费在线观看 | 国产精品明星裸体写真集 | 国产精品久久久久久网站 | 看片91| 国产精品99久久久精品免费观看 | 午夜精品久久久久久久星辰影院 | www成年人视频 | 电影91久久久 | 成人免费视频一区二区 | 日韩一区在线播放 | 久久久久电影 | 中文字幕高清 | 色橹橹欧美在线观看视频高清 | 国产成人一区二区 | 成人av鲁丝片一区二区小说 | 国产精品免费一区二区三区四区 | 亚洲精品成人av | 欧美a√ | 日韩av在线播 | 成人日韩 | 国产日韩一区二区三免费高清 | 99re | 天色综合网 | 在线中文字幕亚洲 |