首页 > 解决方案 > 在 scala 中混合异步库和同步代码的最佳实践是什么

问题描述

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

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

标签: scalafuture

解决方案


正如 Luis 在评论中指出的那样,一般来说,除了AwaitFuture.

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

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

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

fFuture陆地上跑步可能更有用

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

如果碰巧被阻塞,f那么它可能值得包裹或显式使用一个它将处理其许多被阻塞的线程(例如,一个线程可以比内核更多的线程)。fblockingExecutionContextmap

通常,您会希望尽可能将Awaits 移动到代码的最外边缘,甚至可以移动边缘。


推荐阅读