runShareTask<T> static method
运行共享结果任务,当同时运行多个异步任务时,确保只处理一个任务、并排除其他任务, 当第一个任务运行结束时,其他任务会得到第一个任务的结果
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>;
}