【发布时间】:2018-03-01 22:20:40
【问题描述】:
我正在编写一个代码,该代码将从元数据存储库中获取数据库表列表,并按照元数据存储库中的配置在源数据库和目标数据库之间移动数据。以下是我的要求:-
- 并行处理列表中的每个表,并在源和目标之间移动数据。
- 生成将通过电子邮件发送的报告,其中包含有关哪些表已成功移动以及哪些表已失败的信息。
以下是代码的示例实现。方法futureCalc 将实现移动数据。以下是我的问题:-
1.对于发送电子邮件报告,我是否需要使用Async.result 作为阻止会话来获取报告列表,或者是否有非阻止的方式来实现这一点?
2.我在多个论坛上读到应该使用回调而不是阻塞 API,回调是在与主线程不同的线程中异步调用的吗?
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
import scala.util.Success
import scala.util.Failure
import scala.async.Async._
object test extends App {
def futureCalc(i:Int):Int = {
val sleeptime = i*60
println("This is start of thread:"+i)
Thread.sleep(sleeptime)
println("This is after sleep :"+i)
if (i<4)
i*i
else
throw new RuntimeException("Bad thing")
}
val iniList = List(1,2,3,4)
val resultList = iniList map (i => Future{futureCalc(i)})
resultList map (i => {while(!i.isCompleted){
i.onComplete {
case Success(j) => println("No Issues")
case Failure(ex) => println("Something went wrong ")
}
}
}
)
}
【问题讨论】:
标签: scala