run method
Runs request at most once per minInterval for key.
Calls received before an operation starts are folded into that operation. Calls received while it is running are folded into one trailing operation.
Implementation
Future<T> run(String key, AsyncRequest<T> request) {
final existing = _states[key];
if (existing != null) {
existing.request = request;
if (existing.started) {
existing.pending = true;
}
return existing.completer.future;
}
_pruneStartTimes();
final state = _ThrottledRequestState<T>(request);
_states[key] = state;
unawaited(_drain(key, state));
return state.completer.future;
}