使用 Async[F] 将 Future[A] 转换为 F[A]
Transform Future[A] to F[A] with Async[F]
我正在使用 Slick 和 Cats。
database.run
returns a Future
,但我需要我的 class(在 F[_]: Async
上通用)的方法到 return a单子F
。我可以让它像这样工作
val future = database.run(insertion)
val result = Await.result(future, Duration.Inf)
Async[F].delay(result)
但这肯定不是应该这样做的方式,因为它会阻塞线程。
有什么正确的方法吗?
Async.fromFuture
就是你所需要的。
一如既往,scaladoc 是你的朋友。
import cats.effect.{Async, ContextShift]
def foo[F[_] : Async : ContextShift]: F[Result] =
Async.fromFuture(Async[F].delay(database.run(insertion)))
我正在使用 Slick 和 Cats。
database.run
returns a Future
,但我需要我的 class(在 F[_]: Async
上通用)的方法到 return a单子F
。我可以让它像这样工作
val future = database.run(insertion)
val result = Await.result(future, Duration.Inf)
Async[F].delay(result)
但这肯定不是应该这样做的方式,因为它会阻塞线程。
有什么正确的方法吗?
Async.fromFuture
就是你所需要的。
一如既往,scaladoc 是你的朋友。
import cats.effect.{Async, ContextShift]
def foo[F[_] : Async : ContextShift]: F[Result] =
Async.fromFuture(Async[F].delay(database.run(insertion)))