addTask method
添加任务到队列
Implementation
Future<_TaskInfo> addTask(Function doSomeThing) async {
_taskId++;
_isCancelQueue = false;
// 创建任务
_TaskInfo taskInfo = _TaskInfo(id: _taskId, doSomeThing: doSomeThing);
// 创建任务Future
// Completer: 允许创建一个Future对象,稍后用一个值或者错误来完成它
Completer<_TaskInfo> taskCompleter = Completer<_TaskInfo>();
// 创建任务的stream
// StreamController: 一个允许在包含的stream上发送数据、事件、错误的控制器。
StreamController<_TaskInfo> streamController = StreamController();
taskInfo.controller = streamController;
// 添加任务到任务队列
taskList.add(taskInfo);
// 添加任务的监听
streamController.stream.listen((completeTaskInfo) {
// 完成当前任务
if (completeTaskInfo.id == taskInfo.id) {
taskCompleter.complete(completeTaskInfo);
streamController.close();
}
});
// 触发任务
_doTask();
return taskCompleter.future;
}