在 scala 中将异步库与同步代码混合的一些最佳实践是什么?



我正在处理一个 scala 代码,其中第三方库返回一个 Future[布尔] 对象,而我需要在我的 scala 代码中使用这个未来对象,该代码完全以同步方式编写。

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

正如路易斯在评论中指出的那样,一般来说,除了AwaitFuture之外别无选择。

也就是说,您可能有一些选择 在哪里Await.

例如,如果您有类似的代码

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

Future土地上运行f可能更有用

Await.result(someFuture.map(f), Duration.Inf)

如果f碰巧阻塞,那么可能值得将f包装在blocking中,或者显式使用ExecutionContext,该将处理其许多线程被阻塞(例如,线程可能多于内核的线程)用于map

通常,您需要尽可能将Await移动到代码的最外边缘,如果可以的话,甚至可以移动边缘。

相关内容

最新更新