I attend the class Parallel Programming, and it shows the parallel interface:
def parallel[A, B](taskA: => A, taskB: => B): (A, B) = {
val ta = taskA
val tb = task {taskB}
(ta, tb.join())
}
and the following is wrong:
def parallel[A, B](taskA: => A, taskB: => B): (A, B) = {
val ta = taskB
val tb = task {taskB}.join()
(ta, tb)
}
see the interface more at https://gist.github.com/ChenZhongPu/fe389d30626626294306264a148bd2aa
It also show us the right way to execute four tasks:
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)
}
My question: if I don't know the number of tasks advance (a List of tasks), how can I call join for each tasks correctly?
tasks.map(_.join()) // wrong
Edit
The similar discussion also occurs at Discuss this week's module: Parallel Programming
mapreturns a new collection with each element transformed by the function. Maybe you need the transformation without creating the new collection?foreachsince you are not going to return anything?foreachwill also execute those tasks sequentially, not parallelly.