Flutter 开发实战

235课时
1K学过
8分

课程评价 (0)

请对课程作出评价:
0/300

学员评价

暂无精选评价
1分钟

06 异步和同步

前面我们说了 Stream 的内部执行流程,那么同步和异步操作时又有什么区别?具体实现时怎么样的呢?

我们以默认 Stream 流程为例子, StreamController 的工厂创建可以通过 sync 指定同步还是异步,默认是异步模式的。 而无论异步还是同步,他们都是继承了 _StreamController 对象,区别还是在于 mixins 的是哪个 _EventDispatch 实现:

  • _AsyncStreamControllerDispatch
  • _SyncStreamControllerDispatch

上面这两个 _EventDispatch 最大的不同就是在调用 sendData 提交事件时,是直接调用 StreamSubscription_add 方法,还是调用 _addPending(new _DelayedData(data)); 方法的区别。

如下图, 异步执行的逻辑就是上面说过的 scheduleMicrotask, 在 _StreamImplEventsscheduleMicrotask 执行后,会调用 _DelayedDataperform ,最后通过 _sendData 触发 StreamSubscription 去回调数据 。

img