Есть ли простой способ превратить Future > в Future ?

StackOverflow https://stackoverflow.com/questions/2165167

  •  24-09-2019
  •  | 
  •  

Вопрос

У меня есть код, который отправляет запрос в другой поток, который может или не может отправить этот запрос в другой поток.Это дает возвращаемый тип кода Future<Future<T>>.Есть ли какой-нибудь не отвратительный способ немедленно превратить это в генерирующий кодовый код, ожидающий завершения всей будущей цепочки?

Я уже использую библиотеку Guava для обработки других забавных вещей, связанных с параллелизмом, а также в качестве замены коллекций Google и ее хорошей работы, но я не могу найти что-то для этого случая.

Это было полезно?

Решение

Guava 13.0 добавляет Futures.dereference для этого.Для этого требуется общий кодовый код, а не простой общий кодовый код.(Для работы с простым ListenableFuture<ListenableFuture> потребуется вызов makeListenable, для каждого из которых требуется выделенный поток на время существования задачи (что становится понятнее благодаря новому имени метода Future<Future> )

Другие советы

Еще одна возможная реализация, использующая библиотеки guava, и она намного проще.

родовое слово

Я считаю, что это лучшее, что можно сделать для реализации контракта Future.Я поступил максимально неумно, чтобы убедиться, что это соответствует условиям контракта.Не особенно реализация get с таймаутом.

родовое слово

Вы можете создать такой класс:

родовое слово

Вам придется иметь дело с исключениями, которые get () может вызывать, а другие методы - нет.

Это был мой первый удар, но я уверен, что в этом есть много неправильного.Я был бы более чем счастлив просто заменить его чем-нибудь вроде Futures.compress(f).

родовое слово
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top