我参加了课程《并行编程》,其中介绍了并行接口:
def parallel[A, B](taskA: => A, taskB: => B): (A, B) = {
val ta = taskA
val tb = task {taskB}
(ta, tb.join())
}
以下是错误的内容:
def parallel[A, B](taskA: => A, taskB: => B): (A, B) = {
val ta = taskB
val tb = task {taskB}.join()
(ta, tb)
}
请查看以下链接了解更多接口信息:https://gist.github.com/ChenZhongPu/fe389d30626626294306264a148bd2aa
它还向我们展示了执行四项任务的正确方式:
def parallel[A, B, C, D](taskA: => A, taskB: => B, taskC: => C, taskD: => D): (A, B, C, D) = {
val ta = task { taskA }
val tb = task { taskB }
val tc = task { taskC }
val td = taskD
(ta.join(), tb.join(), tc.join(), td)
}
我的问题是:如果我不知道任务数量(一个任务列表),如何正确调用每个任务的 join
方法?
tasks.map(_.join()) // wrong
编辑
类似的讨论也在本周模块的讨论区:并行编程中出现。
map
函数返回一个新的集合,其中每个元素都由该函数转换。也许您需要进行转换,而不创建新的集合? - jwvhforeach
怎么样? - sebszyllerforeach
也会按顺序执行这些任务,而不是并行执行。 - chenzhongpu