addTask method

Future<_TaskInfo> addTask(
  1. Function doSomeThing
)

添加任务到队列

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;
}