我的情况如下:
第1步:x = {def subtract(a,b)
Step2:Thread.sleep(1s)
Step3:y = import scala.util.{Failure, Success}
def sum(a:Int ,b:Int) = a+b
def sub(c:Int, d:Int) = c-d
def mul(e: Int, f: Int) = e*f
val Sum1= Future {sum(2,3); Thread.sleep(1000)}
val SumFinal=Sum1.onComplete({
case Success(result) => println(result)
case Failure(e) => println("failed: " + e)
})
val Subt1 = Future {sub(5,3);Thread.sleep(2000)}
val SubtFinal = Subt1.onComplete({
case Success(result) => result
case Failure(e) => println("failed: " + e)
})
val Mul1= mul(SumFinal,SubtFinal)
println(Mul1)
Step4:Thread.sleep(2s)
Step5:成功完成上述步骤后,执行z = multiple(x,y)
我需要使用Scala中的Futures实现此方案。请帮忙。 我尝试了此代码,但无法正常工作。
getReqDetails
答案 0 :(得分:0)
问题1:
例如的结果speed
是Future {sub(5,3);Thread.sleep(2000)}
返回的值,在Scala中为Thread.sleep
。只需更改顺序即可:()
将在2秒后显示结果Future {Thread.sleep(2000); sub(5,3)}
。如果您确实要在计算后加上2
,只需将结果存储在变量中即可:
sleep
问题2:
Future {
val res = sub(5,3)
Thread.sleep(2000)
res
}
和SumFinal
再次为SubtFinal
,因为()
返回。相反,您可以组合两个期货(或多个,或修改一个,等等,等等)并收回一个期货。一种方法是(在解决问题1之后)
onComplete
答案 1 :(得分:0)
您的方法存在的问题是onComplete
返回unit
。这就是为什么您没有任何结果的原因。因此,subFimal和sumFinal中没有任何内容。
scala> def sum(a: Int, b: Int) = Future { a + b }
sum: (a: Int, b: Int)scala.concurrent.Future[Int]
scala> def sub(a: Int, b: Int) = Future { a - b }
sub: (a: Int, b: Int)scala.concurrent.Future[Int]
scala> def mul(a: Int, b: Int) = Future { a * b }
mul: (a: Int, b: Int)scala.concurrent.Future[Int]
scala> for {
| a <- sum(2,3)
| b <- sub(10, 7)
| c <- mul(a, b)
| } yield c
res0: scala.concurrent.Future[Int] = Future(<not completed>)
scala> res0
res1: scala.concurrent.Future[Int] = Future(Success(15))