多线程与异步
多线程与异步
异步和多线程的区别
基于任务的异步编程模型 (TAP) 提供了异步代码的抽象化。 你只需像往常一样将代码编写为一连串语句即可。 就如每条语句在下一句开始之前完成一样,你可以流畅地阅读代码。 编译器将执行许多转换,因为其中一些语句可能会开始运行并返回表示正在进行的工作的 Task。
这就是此语法的目标:支持读起来像一连串语句的代码,但会根据外部资源分配和任务完成时间以更复杂的顺序执行。 这与人们为包含异步任务的流程给予指令的方式类似。 在本文中,你将通过做早餐的指令示例来查看如何使用 async
和 await
关键字更轻松地推断包含一系列异步指令的代码。 你可能会写出与以下列表类似的指令来解释如何做早餐:
- 倒一杯咖啡。
- 加热平底锅,然后煎两个鸡蛋。
- 煎三片培根。
- 烤两片面包。
- 在烤面包上加黄油和果酱。
- 倒一杯橙汁。
如果你有烹饪经验,便可通过异步方式执行这些指令。 你会先开始加热平底锅以备煎蛋,接着再从培根着手。 你可将面包放进烤面包机,然后再煎鸡蛋。 在此过程的每一步,你都可以先开始一项任务,然后将注意力转移到准备进行的其他任务上。
做早餐是非并行异步工作的一个好示例。 单人(或单线程)即可处理所有这些任务。 继续讲解早餐的类比,一个人可以以异步方式做早餐,即在第一个任务完成之前开始进行下一个任务。 不管是否有人在看着,做早餐的过程都在进行。 在开始加热平底锅准备煎蛋的同时就可以开始煎了培根。 在开始煎培根后,你可以将面包放进烤面包机。
对于并行算法而言,你则需要多名厨师(或线程)。 一名厨师煎鸡蛋,一名厨师煎培根,依次类推。 每名厨师将仅专注于一项任务。 每名厨师(或线程)都在同步等待需要翻动培根或面包弹出时都将受到阻。
异步编程
异步方法的特征:
Async:方法签名中含有Async修饰符的方法就是异步方法。
await:1.暂停所在方法。待结束时继续。
2.暂停的同时进程返回调用方
Task
方法名称以Async结尾
留下一个问题await时有没有创建新的线程