我使用AWS SDK访问S3中的文件。但是,AWS SDK中的S3操作是同步的。是否可以包装此类同步操作以使它们在Scala中异步?
使用Future包装不是一个正确的答案,因为该操作将在另一个线程中阻塞。
答案 0 :(得分:2)
我已经使用了一段时间的东西:
import scala.concurrent.{blocking, Future, ExecutionContext}
/**
* This is an idiomatic way of executing blocking code
* Use BlockingFuture(...) instead of normal Future(...) anywhere
*/
object BlockingFuture {
def apply[T](body: => T)(implicit execctx: ExecutionContext): Future[T] = Future { blocking { body } }
}
所以,正如你所说 - 是的,Futures可能会阻止,这就是我们使用特殊blocking
构造的原因。
更多相关信息: