0

我正在与 Slick 和 Cats 合作。

database.run返回 a Future,但我需要我的类的方法(泛型 on F[_]: Async)返回 monad F。我可以让它像这样工作

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

但这肯定不是应该这样做的方式,因为它阻塞了线程。

有没有合适的方法来做到这一点?

4

1 回答 1

7

Async.fromFuture是你需要的。
与往常一样,scaladoc是你的朋友。

import cats.effect.{Async, ContextShift]

def foo[F[_] : Async : ContextShift]: F[Result] =
  Async.fromFuture(Async[F].delay(database.run(insertion)))
于 2020-03-04T13:25:44.590 回答