2014-09-23 23 views
3

我正在使用Amazon AWS Java SDK的Play Framework(Scala版本)將Amazon S3集成到應用程序中。第三方庫請求ExecutorService時使用Scala ExecutionContext

AWS開發工具包有一個TransferManager類,它提供了一個抽象來管理用於處理下載/上傳到S3的線程池。

我正在嘗試確定是否可以將自定義ExecutionContexts的核心支持集成到此SDK提供的此對象中。特別是,在實例化AWS SDK提供的TransferManager時,可以將自定義的ExecutorService作爲可選參數提供。

Scala的ExecutionClass通過其類聲明中的「with」關鍵字綁定ExecutorService類,所以我想知道是否有某種機制從ExecutionContext獲取ExecutorService對象,如轉換ExecutionContext => ExecutorService的方法。

如果沒有,是否還有其他方法?目前,我只是在玩的標準方法一類外,其在此列出直接實例化一個自定義的ExecutorService:

https://www.playframework.com/documentation/2.3.x/ThreadPools

這種感覺混亂和對框架提供的約定。

謝謝你的時間。

+0

相關https://twitter.com/SomSnytt/status/510841996294893568 – 2014-09-24 02:10:15

回答

5

如果您創建您的上下文是這樣的(不要一味的複製粘貼此 - 它的配置爲阻塞操作):

val blockingContext: ExecutionContext = { 
    val executor = new ThreadPoolExecutor(100, 100, 1, TimeUnit.MINUTES, new LinkedBlockingQueue(1000)) 
    executor.allowCoreThreadTimeOut(true) 
    ExecutionContext.fromExecutorService(executor) // main part 
} 

然後,你就可以從它那裏得到ExecutorService例如:

val executor: ExecutorService = blockingContext.prepare().asInstanceOf[ExecutorService] 
+0

這看起來完全一樣,我正在尋找。我會看看asInstanceOf如何工作的文檔。 – 2014-10-27 20:42:19

+0

這是簡單的Scala語法。 – Tvaroh 2014-10-28 07:29:17

+0

請注意,自從Scala 2.12以來,prepare()方法已被棄用 – Midiparse 2017-01-22 22:04:53

0

某些ExecutionContext實現實現ExecutionContextExecutorService trait,它是ExecutionContext和ExecutorService的子接口。你可能會檢查你從Play/Akka獲得的ExecutionContext是否是其中之一。