Преобразование Future [A] в F [A] с помощью Async[F]

Я работаю с Slick and Cats.

database.run возвращает Future, но мне нужен метод моего класса (общий для F[_]: Async) вернуть монаду F. Я могу заставить это работать вот так

val future = database.run(insertion)    
val result = Await.result(future, Duration.Inf)    
Async[F].delay(result)

но точно так не должно быть, так как это блокирует поток.

Есть ли правильный способ сделать это?

1 ответ

Async.fromFutureэто то, что вам нужно.
Как всегда, скаладок - твой друг.

import cats.effect.{Async, ContextShift]

def foo[F[_] : Async : ContextShift]: F[Result] =
  Async.fromFuture(Async[F].delay(database.run(insertion)))
Другие вопросы по тегам