如何在scala中顺序执行期货
发布时间:2020-12-16 09:31:02 所属栏目:安全 来源:网络整理
导读:我有这种情况,我需要使用迭代器,对于函数f(item)被调用的每个项目,并返回一个Future.Unit。 然而,我需要使每个f(项目)调用顺序执行。他们不能并行运行。 for(item - it) f(item) 将不会工作,因为这将并行启动所有的电话。 我该怎么做,这样他们按顺序呢
我有这种情况,我需要使用迭代器,对于函数f(item)被调用的每个项目,并返回一个Future.Unit。
然而,我需要使每个f(项目)调用顺序执行。他们不能并行运行。 for(item <- it) f(item) 将不会工作,因为这将并行启动所有的电话。 我该怎么做,这样他们按顺序呢? 解决方法
如果你不介意一个很本地化的var,你可以按照以下顺序排列异步处理(每个f(item))(flatMap是序列化的):
val fSerialized = { var fAccum = Future{()} for(item <- it) { println(s"Processing ${item}") fAccum = fAccum flatMap f(item) } fAccum } fSerialized.onComplete{case resTry => println("All Done.")} 一般来说,避免等待操作 – 它们阻止(一种失败的异步点,消耗资源和马虎的设计,可能会死锁) 酷伎1: 您可以通过通常的嫌疑人,平面图链接Futures,它将串行化异步操作。有什么不能做的吗? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |