scala - 在 scala 中混合异步库和同步代码的最佳实践是什么
问题描述
我正在处理一个 scala 代码,其中第 3 方库返回一个 Future[Boolean] 对象,而我需要在完全以同步方式编写的 scala 代码中使用这个未来对象。
目前,我正在对 3rd 方库操作执行 Await.result 以确保它仅返回布尔值。有没有更好的方法来处理这个问题,我的 scala 代码需要一个布尔值才能进一步操作?
解决方案
正如 Luis 在评论中指出的那样,一般来说,除了Await
在Future
.
也就是说,您可能对去哪里有一些选择Await
。
例如,如果您有类似的代码
val result = Await.result(someFuture, Duration.Inf)
f(result)
f
在Future
陆地上跑步可能更有用
Await.result(someFuture.map(f), Duration.Inf)
如果碰巧被阻塞,f
那么它可能值得包裹或显式使用一个它将处理其许多被阻塞的线程(例如,一个线程可以比内核更多的线程)。f
blocking
ExecutionContext
map
通常,您会希望尽可能将Await
s 移动到代码的最外边缘,甚至可以移动边缘。
推荐阅读
- stored-procedures - 如何使用 Azure 数据工厂管道创建存储过程?
- database - 将 KDB 数据导入 DolphinDB 是否有更有效的解决方案?
- python - 当变量数量减半时,为什么我的凸优化问题变得不可行?
- c++ - 在基于范围的 for 循环中在 init 语句上使用属性是否合法?
- ios - 以编程方式自定义 UISearchBar 设计
- python - Pandas 在加载多个 .csv 文件时返回空数据框
- python - 使用 Pymongo 连接到 MongoDB 集群时出现 ValueError
- python-3.x - 有没有办法从 firebase 应用程序分发中以编程方式下载应用程序?
- ios - USDZ 文件转换为 dae 或 glTF 文件 使用命令行工具?
- javascript - 无法聚合从 twilio api 返回的数据