体验async/await异步编程

带界面的应用程序为了防止卡死界面,经常要用到异步编程,常用的方法无论是线程还是异步回调,都不可避免的破坏了代码的流畅性和可读性。今天体验了一把async/await,感觉太爽了,异步开发就像同步一样,完全由Framework底层来处理异步问题。写个小Demo:

假设有一个方法对给定的两个整数进行复杂运算,会耗费较长时间:


  1. public void Compute(int x, int y)  
  2. {  
  3.     //计算过程省略 
  4.     return ......;  
  5. }  

为它封装一个异步方法:


  1. public Task<int> ComputeAsync(int x, int y) 
  2.     //把原方法包装到Task.Run中去 
  3.     return Task.Run<int>(() => { return Compute(x, y); }); 

假设我们是在按一个按钮的时候调用Compute方法:


  1. //用async修饰一下调用方法,这样在方法里才能使用await关键字 
  2. private async void Button_Click(object sender, EventArgs e) 
  3.     try 
  4.     { 
  5.         //await表示等待ComputeAsync异步执行完毕,注意它不阻塞,因此界面线程不受影响。 
  6.         int sum = await ComputeAsync(100, 100); 
  7.  
  8.         //异步执行完毕后,会接下来执行下面的代码,就像在回调中一样 
  9.         MessageBox.Show(string.Format("Result is {0}", sum)); 
  10.     } 
  11.     catch 
  12.     { 
  13.         MessageBox.Show("Error"); 
  14.     } 

看一看Button_Click的代码,和同步调用时几乎一模一样,我们只是加了async和await关键字而已,异步过程完全由Framework底层去处理,太爽了~~

 






     本文转自 BoyTNT 51CTO博客,原文链接:http://blog.51cto.com/boytnt/852253,如需转载请自行联系原作者


上一篇:iOS开发网络篇—NSURLConnection基本使用


下一篇:手动安装python库