在C#5.0中,增加了一个强大的新功能--异步编程。( .NET FrameWork4.5  版本)

它以两个新型关键字出现:

  • ·async
  • ·await

1、Async方法有三种返回类型:

  • async void :是一个“触发并忘记”的异步操作,最常见的应用场景是在async代码和其他代码的边界情况,比如UI事件处理必须返回void。

调用者不能等待任何返回结果,并且不能知道操作什么时候结束或者是否成功。

当你确定你不需要知道操作何时结束或者是否成功时,你应该使用void。

return statement只需要return;,并且是可选择。(不写也行)

  • async Task:允许调用者等待操作结束的结果,并且传递在异步代码执行期间的异常。

当我们不需要任何返回类值时,一个async Task方法比async void方法更好,因为他允许调用者使用await去等待,并且处理异常更容易。

return statement只需要return;,并且是可选择的。(不写也行)

  • async Task<T>:例如Task<string>,通常用于异步操作需要返回值的时候。

return必须有一个T类型的表达式,比如5+x,并且必须出现在方法所有路径的最后。

2、await try中可以使用,但不能在catch和finally中使用,我们可以通过以下方式解决

  bool failed = false;
try
{
page = await webClient.DownloadStringTaskAsync("http://oreilly.com");
}
catch (WebException)
{
failed = true;
}
if (failed)
{
page = await webClient.DownloadStringTaskAsync("http://oreillymirror.com");
}

3、Async lambda表达式

C#是在大多数位置是不允许在Query表达式中使用await关键字的。是因为这些位置会被编译成lambda表达式,正因为如此,该lambda表达式需要标记为async关键字。

我们可以将他们转换,如下

IEnumerable<int> transformed = from x in alexsInts
where x != 9
select x + 2;

通过使用Linq内部带的拓展方法。然后lambda表达式变得明了可读,继而你也就可以标记他们为async,从而使用await了。

IEnumerable<Task<int>> tasks = alexsInts
.Where(x => x != 9)
.Select(async x => await DoSomthingAsync(x) + await DoSomthingElseAsync(x));
IEnumerable<int> transformed = await Task.WhenAll(tasks);

参考:中文转载 http://www.cnblogs.com/tdws/p/5617242.html

最新文章

  1. android手机登录时遇到“QQ安全登录发现病毒”解决
  2. ZooKeeper3.4.6配置
  3. 域用户直接登陆(C#,MVC)
  4. python模块与包加载机制
  5. linux ssh 无密码登陆
  6. socket基础(二)
  7. LESS文档
  8. 51 nod 1456 小K的技术(强连通 + 并查集)
  9. mysql之数据库的增删改查
  10. 巧用PHP中__get()魔术方法
  11. [Swift]LeetCode206. 反转链表 | Reverse Linked List
  12. Crazy Circuits HDU - 3157(有源汇有上下界最小流)
  13. C语言 &#183; 出栈次序
  14. SVN:项目管理工具
  15. Android的音频解码原来是直接调用的本地C方法直接通过硬件解码
  16. 用户说体验 | 关于阿里百川HotFix你需要了解的一些细节
  17. Unity3D笔记五 快捷键
  18. 树形DP求树的直径
  19. J-LINK序列号修改
  20. 数据分析侠A的成长故事

热门文章

  1. vue2.0 组件之间的数据传递
  2. 关于mysql MYISAM引擎的锁问题
  3. myeclipse maven 安装
  4. wap支付宝接口的问题
  5. FileStream读写文件【StreamWriter 和 StreamReader】
  6. C#调用win32 api 操作其它窗口
  7. Linux中文件颜色所代表的属性和颜色
  8. NotePad++中如何出去闪烁的光标?
  9. Chrome 桌面通知Notification
  10. Oracle数据库操作分类DDL、DML、DCL、TCL类别清单异同