在scala中混合使用异步库和同步代码的最佳实践是什么
我正在处理一个scala代码,其中第三方库返回一个未来的[Boolean]对象,而我需要在我的scala代码中使用这个未来的对象,该代码完全以同步方式编写在scala中混合使用异步库和同步代码的最佳实践是什么,scala,future,Scala,Future,我正在处理一个scala代码,其中第三方库返回一个未来的[Boolean]对象,而我需要在我的scala代码中使用这个未来的对象,该代码完全以同步方式编写 目前,我正在对第三方lib操作执行wait.result,以确保它只返回布尔值。有没有更好的方法来处理这个问题,我的scala代码需要一个布尔值来进行进一步的操作?正如Luis在评论中指出的,一般来说,除了等待未来的之外,别无选择 也就是说,您可以选择在哪里等待 例如,如果您有如下代码 val result = Await.result(so
目前,我正在对第三方lib操作执行wait.result,以确保它只返回布尔值。有没有更好的方法来处理这个问题,我的scala代码需要一个布尔值来进行进一步的操作?正如Luis在评论中指出的,一般来说,除了等待
未来的之外,别无选择
也就是说,您可以选择在哪里等待
例如,如果您有如下代码
val result = Await.result(someFuture, Duration.Inf)
f(result)
在Future
land中运行f
可能更有用
Await.result(someFuture.map(f), Duration.Inf)
如果f
发生阻塞,则可能值得将f
包装在blocking
中,或者显式使用ExecutionContext
,该上下文将为映射处理大量被阻塞的线程(例如,线程可能多于核心的线程)
一般来说,你会希望尽可能地将wait
s移动到代码的最外边缘,甚至可以移动边缘。正如路易斯在评论中指出的那样,一般来说,除了等待未来的之外,别无选择
也就是说,您可以选择在哪里等待
例如,如果您有如下代码
val result = Await.result(someFuture, Duration.Inf)
f(result)
在Future
land中运行f
可能更有用
Await.result(someFuture.map(f), Duration.Inf)
如果f
发生阻塞,则可能值得将f
包装在blocking
中,或者显式使用ExecutionContext
,该上下文将为映射处理大量被阻塞的线程(例如,线程可能多于核心的线程)
通常,您会希望尽可能将wait
s移动到代码的最外边缘,甚至可以移动边缘。如果您不能或不想填充Future
的整个代码并使其异步,那么没有比阻塞线程等待值更好的方法了。在一天结束时,同步代码在任何情况下都会这样做。如果您不能或不想填充未来的整个代码并使其异步,那么没有比阻塞线程等待值更好的方法了。最终,同步代码在任何情况下都会这样做。