【发布时间】:2015-10-16 18:37:59
【问题描述】:
我正在尝试了解 Spray 的 detach 指令以及使用 detach 和使用 onComplete 指令之间是否有任何区别。我想要实现的是“每个请求一个线程”,其中线程是指 JVM 线程(应该是 OS 线程)。
那么,A和B有什么区别呢?
方法一:
// assume controller.divide(a,b) returns Future[Int]
val route =
path("divide" / IntNumber / IntNumber) { (a, b) =>
onComplete(controller.divide(a, b)) {
case Success(value) => complete(s"The result was $value")
case Failure(ex) => complete(InternalServerError, s"An error occurred: ${ex.getMessage}")
}
}
方法B:
// assume controller.divide(a,b) returns Int
val route = {
path("divide" / IntNumber / IntNumber) { (a,b) =>
detach(global) {
Try { controller.divide(a,b) } match {
case Success(value) => complete(s"The result was $value")
case Failure(ex) => complete(InternalServerError, s"An error occurred: ${ex.getMessage}")
}
}
} }
干杯!
【问题讨论】: