博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
体验async/await异步编程
阅读量:6266 次
发布时间:2019-06-22

本文共 860 字,大约阅读时间需要 2 分钟。

带界面的应用程序为了防止卡死界面,经常要用到异步编程,常用的方法无论是线程还是异步回调,都不可避免的破坏了代码的流畅性和可读性。今天体验了一把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,如需转载请自行联系原作者

你可能感兴趣的文章
前端如何接收 websocket 发送过来的实时数据
查看>>
JavaWeb下载文件response
查看>>
Laravel的三种安装方法总结
查看>>
SpringMVC加载配置Properties文件的几种方式
查看>>
C#设计模式总结 C#设计模式(22)——访问者模式(Vistor Pattern) C#设计模式总结 .NET Core launch.json 简介 利用Bootstrap Paginat...
查看>>
java 项目相关 学习笔记
查看>>
numpy opencv matlab eigen SVD结果对比
查看>>
WPF获取某控件的位置,也就是偏移量
查看>>
Boost C++ 库 中文教程(全)
查看>>
solr查询优化(实践了一下效果比较明显)
查看>>
jdk目录详解及其使用方法
查看>>
说说自己对RESTful API的理解s
查看>>
通过layout实现可拖拽自动排序的UICollectionView
查看>>
服务器错误码
查看>>
javascript中的面向对象
查看>>
Splunk作为日志分析平台与Ossec进行联动
查看>>
yaffs文件系统
查看>>
Mysql存储过程
查看>>
NC营改增
查看>>
Lua
查看>>