成人免费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異

2021-03-29 09:26:44

SpringBoot異步調用@Async

2009-08-17 16:49:46

C#多線程控制

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技術棧公眾號

主站蜘蛛池模板: 国产精品爱久久久久久久 | 伊人久久精品一区二区三区 | 精品在线一区二区 | 欧美视频免费在线观看 | 成人三级在线播放 | 国产精品久久久久久久久 | 免费在线观看一级毛片 | 亚洲一区二区电影在线观看 | 最近中文字幕免费 | 男女网站免费观看 | 秋霞电影一区二区三区 | 亚洲国产免费 | 草草视频在线免费观看 | 精品国产欧美一区二区三区成人 | 综合久久久 | 亚洲视频在线观看 | 超碰最新在线 | 久久国内| 欧美一区精品 | 在线中文字幕日韩 | 啪啪免费网站 | 日韩精品一区在线 | 一本一道久久a久久精品综合 | 男女网站免费观看 | 亚洲九九色 | 国产三级国产精品 | 亚洲一区国产精品 | 国产精品久久久爽爽爽麻豆色哟哟 | 午夜私人影院在线观看 | 久久与欧美 | 欧美国产日韩精品 | 91久久久久 | 欧美中文字幕一区二区三区亚洲 | 欧美一级大片 | 激情av在线 | 七七婷婷婷婷精品国产 | 九九热精品视频 | 成人精品免费视频 | 成人综合视频在线观看 | 男女羞羞免费网站 | 国产91亚洲精品一区二区三区 |