亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

.Net 異步處理溫習

2019-11-17 03:52:12
字體:
來源:轉載
供稿:網友
這幾天,看WF本質論,里面提到了.net的異步處理。由于里面使用的是代碼片段,所以有點看不懂。于是下定決心,溫習一下.net中的異步處理。

使用C#在.net開發已經有5年了,最初使用.net中的異步處理大約是在4年前。當時,只是為了實現要求的功能,沒有詳細研究。這也難怪看WF時會頭暈(基礎不牢的后果呀)。

首先,我們分析一下異步處理的環境

需要在當前線程中獲取返回值
不需要在當前線程中獲取返回值,但是仍然需要對返回值做處理
對于第1中情況,還可以繼續細分

在當前線程中啟動線程T,然后繼續執行當前線程中的其它任務,最后在當前線程中獲取T的返回值
在當前線程中啟動線程T,然后繼續執行當前線程中的其它任務R1,等待T執行完成,當T執行完成后,繼續執行當前線程中的其它任務R2,最后獲取T的返回值
在當前線程中啟動線程T,只要T在執行就執行任務R,最后獲取T的返回值
下面,我將一一給出例子:

1.1 在當前線程中啟動線程T,然后繼續執行當前線程中的其它任務,最后在當前線程中獲取T的返回值
view sourcePRint?01 using System;  

02 using System.Collections.Generic;  

03 using System.Linq;  

04 using System.Windows.Forms;  

05 using System.Threading;  

06 using System.Runtime.Remoting.Messaging;  

07 namespace FirstWF  

08 {  

09     static class Program  

10     {  

11         /// <summary>  

12         /// The main entry point for the application.  

13         /// </summary>  

14         [STAThread]  

15         static void Main()  

16         {  

17             AsyncFuncDelegate caller = new AsyncFuncDelegate(Func);  

18             Console.WriteLine("Input number please...");  

19             IAsyncResult result = caller.BeginInvoke(Convert.ToInt32(Console.ReadLine()), null, null);  

20             Console.WriteLine("Implement other tasks");  

21             Thread.Sleep(7000);  

22             Console.WriteLine("Implement other tasks end ...");  

23             Console.WriteLine("Get user's input");  

24             Console.WriteLine(caller.EndInvoke(result));  

25             Console.ReadLine();  

26         }  

27         delegate string AsyncFuncDelegate(int userInput);  

28         static string Func(int userInput)  

29         {  

30             Console.WriteLine("Func start to run");  

31             Console.WriteLine("...");  

32             Thread.Sleep(5000);  

33             Console.WriteLine("Func end to run");  

34             return userInput.ToString();  

35         }  

36     }  

37 }

輸出結果如下:

Implement other tasks

Func start to run

...

Func end to run

Implement other tasks end ...

Get user's input

56

1.2 在當前線程中啟動線程T,然后繼續執行當前線程中的其它任務R1,等待T執行完成,當T執行完成后,繼續執行當前線程中的其它任務R2,最后獲取T的返回值
view sourceprint?01 static void Main()  

02         {  

03             AsyncFuncDelegate caller = new AsyncFuncDelegate(Func);  

04             Console.WriteLine("Input number please...");  

05             IAsyncResult result = caller.BeginInvoke(Convert.ToInt32(Console.ReadLine()), null, null);  

06             Console.WriteLine("Implement task 1");  

07             result.AsyncWaitHandle.WaitOne();  

08             result.AsyncWaitHandle.Close();  

09             Console.WriteLine("Implment task 2");  

10             Console.WriteLine("Get user's input");  

11             Console.WriteLine(caller.EndInvoke(result));  

12             Console.ReadLine();  

13         }

輸出結果如下:

Input number please...

25

Implement task 1

Func start to run

...

Func end to run

Implment task 2

Get user's input

25



1.3 在當前線程中啟動線程T,只要T在執行就執行任務R,最后獲取T的返回值
view sourceprint?01 [STAThread]  

02         static void Main()  

03         {  

04             AsyncFuncDelegate caller = new AsyncFuncDelegate(Func);  

05             Console.WriteLine("Input number please...");  

06             IAsyncResult result = caller.BeginInvoke(Convert.ToInt32(Console.ReadLine()), null, null);  

07             while (!result.IsCompleted)  

08             {  

09                 Thread.Sleep(1000);  

10                 Console.Write(">");  

11             }  

12             Console.WriteLine("");  

13             Console.WriteLine("Implement other task2");  

14             Console.WriteLine("Get user's input");  

15             Console.WriteLine(caller.EndInvoke(result));  

16             Console.ReadLine();  

17         }

輸出結果如下:

Func start to run

...

>>>>>Func end to run

>

Implement other task2

Get user's input

23



2 不需要在當前線程中獲取返回值,但是仍然需要對返回值做處理


view sourceprint?01 using System;  

02 using System.Collections.Generic;  

03 using System.Linq;  

04 using System.Windows.Forms;  

05 using System.Threading;  

06 using System.Runtime.Remoting.Messaging;  

07 namespace FirstWF  

08 {  

09     static class Program  

10     {  

11         /// <summary>  

12         /// The main entry point for the application.  

13         /// </summary>  

14         [STAThread]  

15         static void Main()  

16         {  

17             AsyncFuncDelegate caller = new AsyncFuncDelegate(Func);  

18             Console.WriteLine("Input number please...");  

19             caller.BeginInvoke(Convert.ToInt32(Console.ReadLine()), new AsyncCallback(CallBackFunc), "Message from Main thread.");  

20             Console.WriteLine("Main thread ends");  

21             Console.ReadLine();  

22         }  

23         delegate string AsyncFuncDelegate(int userInput);  

24         static string Func(int userInput)  

25         {  

26             Console.WriteLine("Func start to run");  

27             Console.WriteLine("...");  

28             Thread.Sleep(5000);  

29             Console.WriteLine("Func end to run");  

30             return userInput.ToString();  

31         }  

32         static void CallBackFunc(IAsyncResult ar)  

33         {  

34             AsyncResult result = ar as AsyncResult;  

35             string inputMessage = result.AsyncState as string;  

36             AsyncFuncDelegate caller = result.AsyncDelegate as AsyncFuncDelegate;  

37             Console.WriteLine("call back starts");  

38             Console.WriteLine(inputMessage);  

39             Console.WriteLine("The input number is : " + caller.EndInvoke(ar));  

40             Console.WriteLine("call back ends");  

41         }  

42     }  

43 }



輸出結果如下:

Input number please...

23

Main thread ends

Func start to run

...

Func end to run

call back starts

Message from Main thread.

The input number is : 23

call back ends



記得以前的代碼,寫的都不是很好。雖然call.BeginInvoke可以開始異步調用,但幾乎就沒有使用過EndInvoke。EndInvoke可以保證異步調用被正常結束,使代碼更加健康。

異步調用,可以使代碼具有更高的執行效率,但是在異步調用時,應該有一個健康的使用習慣。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人女保姆的销魂服务| 亚洲精品福利视频| 欧美一级片一区| 91色视频在线观看| 欧美激情精品久久久久久免费印度| 欧美亚洲视频一区二区| 日韩激情av在线免费观看| 国产成人欧美在线观看| 欧美成人精品在线| 欧美激情xxxx性bbbb| 国产98色在线| 亚洲色图25p| 国产精彩精品视频| 国产亚洲人成网站在线观看| 欧美成人在线免费| 亲子乱一区二区三区电影| 97精品一区二区三区| 国产香蕉精品视频一区二区三区| 亚洲成人精品久久久| 久久久99久久精品女同性| 日韩精品中文字幕在线播放| 亚洲欧美中文字幕在线一区| 欧美成人激情在线| 久久免费国产精品1| 国语自产偷拍精品视频偷| 91sa在线看| 成人精品一区二区三区电影黑人| zzjj国产精品一区二区| 日韩av片免费在线观看| 亚洲欧美日韩在线高清直播| 亚洲欧美一区二区三区情侣bbw| 日本国产欧美一区二区三区| 97福利一区二区| 亚洲福利影片在线| 日本三级韩国三级久久| 亚洲福利视频网站| 国产精品视频区1| 91精品久久久久久久久久入口| 国内精品美女av在线播放| 不卡中文字幕av| 午夜精品久久久久久99热软件| 欧美极品第一页| 欧美一级视频在线观看| 欧美贵妇videos办公室| 在线不卡国产精品| 成人黄色生活片| 欧美高跟鞋交xxxxxhd| 亚州欧美日韩中文视频| 欧美日韩在线影院| 2021久久精品国产99国产精品| 国产精品国产亚洲伊人久久| 亚洲va欧美va国产综合剧情| 92福利视频午夜1000合集在线观看| 久久久亚洲国产天美传媒修理工| 欧美裸体xxxxx| 久久久久亚洲精品国产| 日韩在线视频免费观看| 亚洲最新av在线网站| 亚洲电影免费观看高清完整版在线| 国产午夜精品视频免费不卡69堂| 国产亚洲精品美女| 亚洲成人激情在线| 亚洲人高潮女人毛茸茸| 亚洲视频777| 国产精品久久久精品| 亚洲品质视频自拍网| 久久琪琪电影院| 亚洲美腿欧美激情另类| 精品久久久久久中文字幕大豆网| 亚洲欧美中文日韩在线| 精品中文字幕久久久久久| 美日韩精品免费视频| 成人羞羞国产免费| 国产精品美女免费视频| 欧美日韩美女在线| 久久精品在线视频| 欧美日本在线视频中文字字幕| 欧美久久精品午夜青青大伊人| 国产一区二区免费| 91在线免费观看网站| 国产视频欧美视频| 亚洲精品美女视频| 久久久极品av| 色综合色综合网色综合| 亚洲欧美中文在线视频| 亚洲自拍小视频| 亚洲综合色av| 不卡av在线网站| 国产精品白丝jk喷水视频一区| 日本精品免费观看| 亚洲国产精品成人av| 国产中文字幕亚洲| 久久久久国产一区二区三区| 亚洲成人免费在线视频| 久久人人看视频| 九九久久久久久久久激情| 久久97久久97精品免视看| 欧美性一区二区三区| 日韩一区二区av| 亚洲国产日韩欧美在线图片| 国产成人jvid在线播放| 91精品国产综合久久久久久蜜臀| 91极品女神在线| 国产精品96久久久久久| 最近2019免费中文字幕视频三| 国产精品黄色av| 日韩精品免费一线在线观看| 国产亚洲一区二区在线| 91国偷自产一区二区三区的观看方式| 欧美精品videofree1080p| 成人国产精品一区| 欧美亚洲成人网| 欧美视频一区二区三区…| 欧美风情在线观看| 欧美亚洲成人免费| 日韩精品黄色网| 欧美午夜激情在线| 亚洲天堂视频在线观看| 国产成人精品免高潮在线观看| 国产精品a久久久久久| 成人97在线观看视频| 国产精品视频1区| 91在线观看欧美日韩| 国产精品午夜一区二区欲梦| 国产日韩在线播放| 久久99精品国产99久久6尤物| 亚洲乱码av中文一区二区| 亚洲性线免费观看视频成熟| 黑人巨大精品欧美一区二区一视频| 欧洲成人免费aa| 日韩电影中文字幕| 色无极影院亚洲| 97在线视频免费看| 精品无人区乱码1区2区3区在线| 欧美一级黄色网| 日韩欧美中文字幕在线观看| 精品国产一区二区三区四区在线观看| 精品国产拍在线观看| 国产精品香蕉av| 97视频在线观看成人| 2019中文字幕在线免费观看| 日韩美女在线播放| 亚洲高清久久久久久| 国产精品一区二区三| 一区二区三区 在线观看视| 毛片精品免费在线观看| 亚洲美女在线视频| 亚洲色图五月天| 国产日韩欧美日韩| 亚洲男子天堂网| 欧美成人午夜激情在线| 欧美成人免费播放| 国产一区二区三区三区在线观看| 国产成人鲁鲁免费视频a| 国产视频久久久久| 91香蕉电影院| www.亚洲男人天堂| 国产精品久久国产精品99gif| 国产成人精品网站| 日韩亚洲成人av在线| 中文字幕自拍vr一区二区三区| 日本精品视频在线播放| 成人免费观看网址| 久久久亚洲影院|