С Scala , как я могу преобразовать Iterable[t]
в Future[Seq[T]]
?
В основном я хочу прочитать все значения, возвращаемые запросом в Apache Ignite, который возвращает IgniteCursor .
Я хочу читать с этого курсора неблокирующим способом.
Я могу написать:
val iterable = cursor.asScala
val result = iterable.toList
Future{
result
}
Но я думаючто этот код блокирует, а не асинхронный.Я прав?
Имеет ли смысл преобразование Iterable
в Future[Seq]
?
ОБНОВЛЕНИЕ
Моя цель - получить небольшой список записей без блокировкипоток вызывающего или рабочий поток, потому что я получу много одновременных вызовов.
Мой Iterable
на самом деле IgniteCursor
, поэтому, я полагаю, внутренне он будет выполнять некоторые операции с сетью / базой данных.Обычно существуют методы для выполнения этих операций асинхронно.Например, чтобы прочитать одно значение, я могу использовать getAsync
вместо get
.
. Для курсора у меня есть только функция getAll
, поэтому я решил использовать Iterable
разумным способом.
Насколько я понимаю, при использовании асинхронных методов потоки не блокируются, но они могут выполнять другие задачи до завершения работы сети.Я ожидал бы функцию, которая возвращает Future
/ IgniteFuture
или обратный вызов.
Есть способ получить все записи без блокировки потока?
Наконец, чтобы правильно освободить ресурсы, которые янужно вызвать close
функцию.Если я напишу Future(cursor.asScala.toList)
, когда должен вызываться метод close?На onComplete
из Future
?
Другое простое решение - написать Future{cursor.getAll.asScala}
, но я полагаю, что внутренне рабочий поток будет заблокирован для ожидания всех записей.
Может быть, я что-то упустил?
ОБНОВЛЕНИЕ 2
Другими словами, есть способ получить список записей из Ignite, используя «Асинхронный неблокирующий ввод-вывод»?