如何将Scala中的阻塞IO包装为非阻塞

时间:2015-07-05 01:54:09

标签: scala io nonblocking

我使用AWS SDK访问S3中的文件。但是,AWS SDK中的S3操作是同步的。是否可以包装此类同步操作以使它们在Scala中异步?

使用Future包装不是一个正确的答案,因为该操作将在另一个线程中阻塞。

1 个答案:

答案 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构造的原因。

更多相关信息: