基本概念

普通任务按照顺序执行;异步任务将在未来的某个时间执行。

实际演示

void main() {
// waitFuture 函数是一个异步函数,阻塞会发生在函数内部
waitFuture();
// 第 5 行的任务不是异步的任务,线程会直接执行,不等待。
print('The normal task was completed by main thread.');
} // 加了一个async之后,就是一个异步函数,异步函数里面的所有任务都是阻塞的。
void waitFuture() async {
print('The future task begins to start.');
// 任务开始等待
await Future.delayed(Duration(seconds: 2));
// 前面有一个 await 的任务,等待上一个任务执行完擦执行下一步
print('Wait for future task to complete.');
}

分析

任务的编写顺序是:

  1. print('The future task begins to start.');
  2. await Future.delayed(Duration(seconds: 2));
  3. print('Wait for future task to complete.');
  4. print('The normal task was completed by main thread.');

第三和第四个普通任务被第二个异步任务阻塞,必须等待异步任务完成之后才可以按照顺序执行。所以,这三个句子的打印顺序是:

  1. The future task begins to start.
  2. The normal task was completed by main thread.
  3. Wait for future task to complete.

最新文章

  1. 刨一刨内核container_of()的设计精髓
  2. 2014 网选 5024 Wang Xifeng's Little Plot
  3. 前端实战——前端效果accordition的实现
  4. codevs 1228 苹果树
  5. AMQ学习笔记 - 12. Spring-JmsTemplate特性设置
  6. CSS3实战:让我们尽情的圆角吧
  7. spring技术翻译开始
  8. VI 配置文件(略全)
  9. JSON中JObject和JArray,JValue序列化(Linq)
  10. DirectFB 之 字体显示(2)
  11. [js高手之路] 跟GhostWu一起封装一个字符串工具库-扩展字符串位置方法(4)
  12. Circle
  13. 利用requirejs实现vue的模块化开发
  14. .NET MVC全局异常处理(二)
  15. appium+夜神模拟器+python安卓app爬虫初体验
  16. java连接数据库报了ssl连接的警告
  17. [EXP]Cisco RV110W - Password Disclosure / Command Execution
  18. ubuntu ssh 与 Samba安装
  19. 基本数据类型(list,tuple)
  20. MVVM框架在unity开发中的使用

热门文章

  1. DOM树
  2. 编程式导航路由跳转到当前路由(参数不变), 多次执行会抛出NavigationDuplicated的警告错误?
  3. php 图片转换二进制数
  4. 从局部信息推测基恩士的Removing BackGround Information算法的实现。
  5. BUUCTF-另一个世界
  6. windows下安装和使用virtualenvwrapper-win
  7. 快速保存Win10锁屏壁纸,收获美丽瞬间
  8. ServletContext 对象
  9. centos服务器安全技巧
  10. 综合案例_文件搜索和FileFilter过滤器的原理和使用