我讀過如何處理與播放併發一些教程,並發現了一些例子:併發播放2.1以上
異步工作
import scala.concurrent.{ExecutionContext, future}
def sendEmailAsync(from: String, to: String, subject: String, body: String) = {
import ExecutionContext.Implicits.global // in scala.concurrent
future {
EmailHelper.sendEmail(from, to, subject, body)
}
}
預定作業
import play.api.libs.concurrent.{Akka, Execution}
def sendEmailOnSchedule(from: String, to: String, subject: String, body: String) = {
import scala.concurrent.duration._
import Execution.Implicits.defaultContext // in play.api.libs.concurrent
Akka.system.scheduler.scheduleOnce(10 seconds) {
EmailHelper.sendEmail(from, to, subject, body)
}
}
那麼,我有點困惑......第一個例子使用scala.concurrent.ExecutionContext.Implicits.global
,而第二個例子使用play.api.libs.concurrent.Execution.Implicits.defaultContext
。爲什麼?有人能解釋我幕後發生了什麼嗎?
'ExecutingContext'就像java的ExecutorService(線程池),你甚至可以自己創建它,如果你喜歡。例如,play-slick模塊使用分離的上下文來執行數據庫操作。 https://github.com/freekh/play-slick/blob/master/src/main/scala/play/api/db/slick/SlickExecutionContext.scala – jilen