使用 async/ await 进行 异步 编程

一、异步函数

异步函数概念。 通常 是 指用 async 修饰 符 声明 的, 可 包含 await 表达式 的 方法 或 匿名 函数 1。 从 语言 的 视角 来看, 这些 await 表达式 正是 有意思 的 地方: 如果 表达式 等待 的 值 还不 可用, 那么 异步 函数 将 立即 返回; 当 该 值 可用 时, 异步 函数 将( 在 适当 的 线程 上) 回到 离开 的 地方 继续 执行。 此前“ 在这 条 语句 完成 之前 不要 执行 下一 条 语句” 的 流程 依然 不变, 只是 不再 阻塞。

二、异步执行的基础

异步执行模型,充斥着后续操作。即某个操作完成后会进行另外的后续操作。回调函数类似。在net 中后续操作理所应当由委托表示,且通常为接收异步操作结果的action。实际上,C#编译器会对所有的await都构建一个后续操作;

在C#5中,异步的操作流程大致分为以下流程:

1、执行 某些 操作。

2、开始 异步 操作, 并 记住 返回 的 token。

3、可能 会 执行 其他 操作。( 在 异步 操作 完成 前, 往往 不能 进行 任何 操作, 此时 忽略 该 步骤。)

4、等待 异步 操作 完成( 通过 token)。

5、执行 其他 操作。

6、完成。

两个: async 是在 声明 异步 方法 时 使用 的 修饰 符, await 表达式 则 负责 消费 异步 操作。

三 、详细内容讲解

1.声明异步方法:方法最好包含async关键字,async可以出现在返回类型之前的任何位置;

2、异步方法的返回类型:调用者和异步方法之间是通过返回值来通信的,异步方法的的返回类型只能为:

void、Task、Task<Result>....

.NET 4 中的 Task 和 Task< TResult> 类型 都 表示 一个 可能 还未 完成 的 操作。 Task< TResult> 继承 自 Task。 二者 的 区别 是, Task< TResult> 表示 一个 返回 值 为 T 类型 的 操作, 而 Task 则 不需要 产生 返回 值。

之所以 将 异步 方法 设计 为 可以 返回 void, 是 为了 和 事件 处理 程序 兼容。

对于一个异步方法,只有在作为事件订阅者时才能返回void。在其他需要忒定返回值的情况下,最好将方法声明为Task。

3.可等待模式

上一篇:Atitit. Async await 优缺点 异步编程的原理and实现 java c# php


下一篇:LR结果分析——TPS和吞吐率