runShareTask<T> static method

Future<T> runShareTask<T>(
  1. Object id,
  2. Future<T> task()
)

运行共享结果任务,当同时运行多个异步任务时,确保只处理一个任务、并排除其他任务, 当第一个任务运行结束时,其他任务会得到第一个任务的结果

Implementation

static Future<T> runShareTask<T>(Object id, Future<T> Function() task) {
  if (_shareTaskQueue.containsKey(id)) {
    return _shareTaskQueue[id]! as Future<T>;
  }

  Completer<T>? completer = Completer<T>();
  _shareTaskQueue[id] = completer.future;

  task()
      .then((result) => completer!.complete(result))
      .catchError((error) => completer!.completeError(error))
      .whenComplete(() {
        _shareTaskQueue.remove(id);
        completer = null;
      });

  return _shareTaskQueue[id] as Future<T>;
}