码迷,mamicode.com
首页 > Windows程序 > 详细

C#中委托实现的异步编程

时间:2016-09-20 18:05:13      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:

所谓同步:如果在代码中调用了一个方法,则必须等待该方法所有的代码执行完毕之后,才能回到原来的地方执行下一行代码。

异步:如果不等待调用的方法执行完,就执行下一行代码。

1.0 同步例子:

 1 class Program
 2     {
 3         private static int Calculate(int a, int b)
 4         {
 5             Console.WriteLine("1.开始计算!");
 6 
 7             System.Threading.Thread.Sleep(1000 * 3);//假如计算需要3秒钟
 8 
 9             int c = a + b;
10 
11             Console.WriteLine("2.计算完成,结果:{0}+{1}={2}", a, b, c);
12 
13             return c;
14         }
15 
16         static void Main(string[] args)
17         {
18             Console.WriteLine("---------程序运行开始----------");
19 
20             Calculate(1, 2);
21 
22             Console.WriteLine("---------程序运行结束----------");
23 
24             Console.ReadKey();
25         }
26     }

1.1 运行结果:

技术分享

2.0 改用异步调用

 1 static void Main(string[] args)
 2         {
 3             Console.WriteLine("-----------程序运行开始----------");
 4 
 5             Func<int, int, int> action = Calculate;//声明一个委托
 6 
 7             IAsyncResult ret = action.BeginInvoke(1, 2, null, null);
 8 
 9             Console.WriteLine("1.我不参与计算,先走了啊!");
10 
11             int amount = action.EndInvoke(ret);
12 
13             Console.WriteLine("-----------程序运行结束----------");
14 
15             Console.ReadKey();
16         }

2.1 运行结果:

技术分享

 

2.2 为了提高程序的使用体验,我们可以再计算的时候,每隔一秒钟,打印一个点“.”。整体代码改成如下:

 1 private static int Calculate(int a, int b)
 2         {
 3             System.Threading.Thread.Sleep(1000 * 10);//假如计算需要3秒钟
 4 
 5             int c = a + b;
 6 
 7             Console.WriteLine("\r\n计算完成,结果:{0}+{1}={2}", a, b, c);
 8 
 9             return c;
10         }
11 
12         static void Main(string[] args)
13         {
14             Console.WriteLine("-----------程序运行开始----------");
15 
16             Func<int, int, int> action = Calculate;//声明一个委托
17 
18             IAsyncResult ret = action.BeginInvoke(1, 2, null, null);
19 
20             Console.WriteLine("我不参与计算,先走了啊!");
21 
22             Console.WriteLine("正在努力计算:");
23             while (ret.IsCompleted == false)
24             {
25                 Console.Write(".");
26                 System.Threading.Thread.Sleep(1000);
27             }
28 
29             int amount = action.EndInvoke(ret);
30 
31             Console.WriteLine("-----------程序运行结束----------");
32 
33             Console.ReadKey();
34         }

2.3 运行结果:

技术分享

 

C#中委托实现的异步编程

标签:

原文地址:http://www.cnblogs.com/renjing/p/Invoke.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!