我正在处理一个 scala 代码,其中第三方库返回一个 Future[布尔] 对象,而我需要在我的 scala 代码中使用这个未来对象,该代码完全以同步方式编写。
目前,我正在对第三方库操作执行 Await.result,以确保它只返回布尔值。有没有更好的方法来解决这个问题,我的 scala 代码需要一个布尔值才能进一步操作?
正如路易斯在评论中指出的那样,一般来说,除了Await
Future
之外别无选择。
也就是说,您可能有一些选择 在哪里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
移动到代码的最外边缘,如果可以的话,甚至可以移动边缘。