C# -- 等待異步操作執行完成的方式


1. 等待異步操作的完成,代碼實現

 1 class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             Func<int, int> mySum1 = SumNumbers;
 6             Func<int, int> mySum2 = SumNumbers;
 7             Func<int, int> mySum3 = SumNumbers;
 8 
 9             AsyncCallback callback = c => Console.WriteLine("線程ID:{0},回調函數執行:{1}",Thread.CurrentThread.ManagedThreadId,c.AsyncState);
10 
11 
12             IAsyncResult result1= mySum1.BeginInvoke(10000, callback, "第一個異步");
13             IAsyncResult result2= mySum2.BeginInvoke(10000, callback, "第二個異步");
14             IAsyncResult result3= mySum3.BeginInvoke(10000, callback, "第三個異步");
15 
16 
17             //異步等待方式1:使用EndInvoke
18             int asyc1 = mySum1.EndInvoke(result1);
19             Console.WriteLine("第一個異步已經執行完成,結果:{0}",asyc1);
20 
21             //異步等待方式2:使用AsyncWaitHandle.WaitOne,參數-1表示一直等待到執行完成
22             if (result2.AsyncWaitHandle.WaitOne(-1))
23             {
24                 Console.WriteLine("第二個異步執行完成");
25             }
26 
27             //異步等待方式3:使用IsCompleted判斷
28             while (!result3.IsCompleted)
29             {
30                 Console.WriteLine("第三個異步還在執行中....");
31                 Thread.Sleep(300);
32             }
33             Console.WriteLine("第三個異步執行完成");
34 
35             Console.ReadKey();
36         }
37 
38         public static int SumNumbers(int count)
39         {
40             int sum = 0;
41             for (int i = 0; i < count; i++)
42             {
43                 sum += i;
44             }
45 
46             Thread.Sleep(3000);
47             return sum;
48         }
49     }

2. 代碼執行結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM