I attend the class [Parallel Programming](https://www.coursera.org/learn/parprog1/), 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](https://www.coursera.org/learn/parprog1/discussions/weeks/1/threads/Uh8w9yWrEea6-g6AAdRd5w?sort=createdAtDesc)