1分钟
06 异步和同步
前面我们说了 Stream
的内部执行流程,那么同步和异步操作时又有什么区别?具体实现时怎么样的呢?
我们以默认 Stream
流程为例子, StreamController
的工厂创建可以通过 sync
指定同步还是异步,默认是异步模式的。 而无论异步还是同步,他们都是继承了 _StreamController
对象,区别还是在于 mixins
的是哪个 _EventDispatch
实现:
_AsyncStreamControllerDispatch
_SyncStreamControllerDispatch
上面这两个 _EventDispatch
最大的不同就是在调用 sendData
提交事件时,是直接调用 StreamSubscription
的 _add
方法,还是调用 _addPending(new _DelayedData(data));
方法的区别。
如下图, 异步执行的逻辑就是上面说过的 scheduleMicrotask
, 在 _StreamImplEvents
中 scheduleMicrotask
执行后,会调用 _DelayedData
的 perform
,最后通过 _sendData
触发 StreamSubscription
去回调数据 。
学员评价