Dart 异步编程


Dart与JavaScript一样 是 单线程模型
但这并不意味着Dart中不能进行异步编程
只是这种异步编程区别于传统的多线程异步方式

Dart 所有代码都 在一个线程上运行
Dart 可以运行在多个isolate上
isolate可以看做一个微小的线程
isolate由虚拟机调度
isolate之间没有共享内存
因此它们之间没有竞争
不需要锁 不用担心死锁
因此开销小 性能高
由于没有共享内存
所以它们之间唯一的通信只能通过Port进行
而且Dart中的消息传递也总是异步的
Dart 两种方式 使用 Future对象 进行异步编程
使用 async 和 await关键字
使用 Future API

使用async和await编写代码非常简单
而且编写的代码看起来有点像同步代码
实际上是异步的
// 导入io库
调用sleep函数
import 'dart:io';
// 模拟耗时操作
调用sleep函数睡眠2秒
doTask() async{
  await sleep(const Duration(seconds:2));
  return "Ok";
}
// 定义一个函数用于包装
test() async {
  var r = await doTask();
  print(r);
}
void main(){
  print("main start");
  test();
  print("main end");
}
运行结果
main start
main end
Ok