Я хочу объединить много фьючерсов в один запрос, который срабатывает либо при достижении максимального размера пакета, либо при достижении максимального времени с момента получения самого раннего будущего.
Мотивация
Во флаттере у меня есть много элементов пользовательского интерфейса, которые должны отображать результат будущего, в зависимости от данных в элементе пользовательского интерфейса.
Например, у меня есть виджет для места,и подвиджет, который показывает, сколько времени потребуется, чтобы дойти до места. Чтобы вычислить, сколько времени займет прогулка, я отправляю запрос в Google Maps API, чтобы узнать время в пути до места.
Более эффективно и экономично объединить все эти запросы API вПакетный запрос API. Поэтому, если виджеты мгновенно отправляют 100 запросов, тогда фьючерсы могут быть переданы через одного провайдера, который объединяет фьючерсы в один запрос к Google и распаковывает результат от Google во все отдельные запросы.
Поставщик должен знать, когда прекратить ожидание большего количества фьючерсов, а когда фактически выдать запрос, который должен контролироваться максимальным размером пакета (т. Е. Количеством запросов времени в пути) или максимальным количеством времени, которое вы выполняете. готовы ждать, пока не начнется пакетирование.
Требуемый API будет выглядеть примерно так:
// Client gives this to tell provider how to compute batch result.
abstract class BatchComputer<K,V> {
Future<List<V>> compute(List<K> batchedInputs);
}
// Batching library returns an object with this interface
// so that client can submit inputs to completed by the Batch provider.
abstract class BatchingFutureProvider<K,V> {
Future<V> submit(K inputValue);
}
// How do you implement this in dart???
BatchingFutureProvider<K,V> create<K,V>(
BatchComputer<K,V> computer,
int maxBatchSize,
Duration maxWaitDuration,
);
Обеспечивает ли Dart (или пакет в пабе) эту функцию пакетирования, и если нетКак бы вы реализовали функцию create
выше?