在 Scala 中将异步库与同步代码混合使用的最佳实践是什么

What are some best practices to mix async libraries with sync code in scala

我正在编写 scala 代码,其中第 3 方库 returns 一个 Future[Boolean] 对象,而我需要在完全以同步方式编写的 scala 代码中使用这个 future 对象。

目前,我正在对第 3 方库操作执行 Await.result 以确保它 returns 只是布尔值。有没有更好的方法来处理这个问题,我的 scala 代码需要一个布尔值才能进一步操作?

正如 Luis 在评论中指出的那样,一般来说,除了在 FutureAwaiting 别无选择。

也就是说,您可以选择 Await

例如,如果您有这样的代码

val result = Await.result(someFuture, Duration.Inf)
f(result)

运行 fFuture 登陆

可能更有用
Await.result(someFuture.map(f), Duration.Inf)

如果 f 碰巧阻塞,那么可能值得将 f 包装在 blocking 中或显式使用 ExecutionContext 来处理它的很多线程map.

被阻塞(例如线程数多于内核数)

一般来说,您会希望尽可能将 Await 移动到代码的最外层边缘,如果可以的话甚至移动边缘。