首页 > 代码库 > C#中委托实现的异步编程

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

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

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

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#中委托实现的异步编程