Я создаю библиотеку, которая, как часть ее функциональности, делает HTTP-запросы. Чтобы заставить его работать в нескольких средах, в которых он будет развернут, я бы хотел, чтобы он мог работать с фьючерсами или без них.
Один из вариантов заключается в том, чтобы библиотека параметризовала тип своего ответа, чтобы вы могли создать экземпляр библиотеки с типом Future
или экземпляр с типом Id
, в зависимости от того, используете ли вы асинхронную реализацию HTTP. (Id
может быть монадой Identity - достаточно, чтобы предоставить пользователям непротиворечивый интерфейс)
Я начал с этого подхода, но он усложнился. Вместо этого я бы хотел использовать тип Future везде, упаковывая синхронные ответы в Future, где это необходимо. Однако я понимаю, что использование фьючерсов всегда будет влечь за собой какой-то пул потоков. Это не будет летать, например. AppEngine (необходимая среда).
Есть ли способ создать Future из значения, которое будет выполняться в текущем потоке и, таким образом, не вызывать проблем в средах, где невозможно создавать потоки?
(ps в качестве дополнительного требования мне нужно иметь возможность кросс-сборки библиотеки обратно в Scala v2.9.1, что может ограничить функции, доступные в scala.concurrent)
Is there a way to create a Future from a value that will be executed on the current thread
Зачем тогда использовать будущее?? - person Jatin   schedule 01.08.2013Promise
? - person Jatin   schedule 01.08.2013