1.场景
我们在调用接口时,很多时候会同时调用多个接口,接口都是异步执行,我们很难知道调用的多个接口哪个会最后执行完成,我们有时候需要对最后一个接口执行完成的时机监听,所以基于该需求,设计了CombineExecutor,对类似的需求进行监听。
2.代码
group_key.dart
///合并执行分类
class GroupKey {
///是否需要监听,不需要监听,则不会执行监听回调
final bool isMonitor;
GroupKey({this.isMonitor = true});
}
executor.dart
import 'group_key.dart';
///执行者
///开始一个无限循环的执行进程,等待事件默认50毫秒
class Executor {
final GroupKey key;
///延迟时间。
///进程执行的快慢,单位毫秒ms,时间越短,反应越灵敏,
///但是消耗的新能越多,不能设置为0,否则会卡住进程。
///默认延迟50ms。
final int? delayed;
bool _stop = true;
Function(GroupKey key)? _stopCallback;
Function(GroupKey key)? _startCallback;
Executor(this.key, {this.delayed});
///开始执行[Executor]
///[callback]会循环调用
start({Function(GroupKey key)? callback}) async {
_stop = false;
_startCallback = callback ?? _startCallback;
while (!_stop) {
_startCallback?.call(key);
await Future.delayed(Duration(milliseconds: delayed ?? 50));
}
_stopCallback?.call(key);
}
///结束执行[Executor]
///[callback]只会在进程结束时执行一次
stop({Function(GroupKey key)? callback}) {
_stop = true;
_stopCallback