Dart 事件循环 Event Loop 机制

Dart 事件循环 Event Loop 机制

Dart 是单线程的,利用事件循环机制来解决线程卡顿问题。

当 main 函数运行时,会生成一个事件循环机制,不断地循环 main 函数,直至 main 函数内全部事件都全部运行完毕。

在循环的时候实际上是在检查 Event Queue ( 事件队列 ),使用 Future 关键字定义的函数会产生一个 事件消息并被添加到事件消息队列。

简单地理解 :

main 函数逐行执行代码,执行完成后循环检查 Event Queue 中是否有事件,如果有就检查其是否执行完成。
这样一直循环,直至 Event Queue 中没有任何事件。

Dart 异步函数

异步编程可以使我们在开发中摆脱回调地狱。dart 作为一种新生的语言,很自然的,也有await 和 async,可以顺利地实现异步编程。

为什么要用异步编程

那么为什么要用异步编程呢? 只用同步不能够解决吗?

其实大多情况下同步已经够用了,但是在下面的几种情况下,同步的场景还是有缺陷的。

需要花很长时间从网络上下载数据的情况。
读取数据库的耗时情况。
从文件读取数据的情况。
总结而言,如果某些操作需要花费大量的时间,那么就可以考虑使用异步编程了。

如何使用

async 是方法的描述符,如果要使用 await,则必须配合 async 一起使用 :

Future<函数返回值类型> 函数名称() async {
  var *** = await ****();
}
// await后面一般接着的是Future对象。

示例

Future<String> GetIP() async {
  return Future.delayed(Duration(seconds: 1), () => "127.0.0.1");
}

void main(List<String> args) {
  Future IPFuture = GetIP();
  IPFuture.then((ip) {
    print(ip);
  }).onError((error, stackTrace) {
    print(error);
    print(stackTrace);
  });
}