You are developing an application that will use multiple asynchronous tasks to optimize performance.
You create three tasks by using the following code segment. (Line numbers are included for reference only.)

You need to ensure that the ProcessTasks() method waits until all three tasks complete before continuing.
Which code segment should you insert at line 09?
Correct Answer: D
Explanation: The Task.WaitAll method (Task[]) waits for all of the provided Task objects to complete execution.
Example:
// Construct started tasks
Task<int>[] tasks = new Task<int>[n];
for (int i = 0; i < n; i++)
{
tasks[i] = Task<int>.Factory.StartNew(action, i);
}
// Exceptions thrown by tasks will be propagated to the main thread
// while it waits for the tasks. The actual exceptions will be wrapped in AggregateException.
try
{
// Wait for all the tasks to finish.
Task.WaitAll(tasks);
// We should never get to this point
Console.WriteLine("WaitAll() has not thrown exceptions. THIS WAS NOT EXPECTED.");
}
Reference: Task.WaitAll Method (Task[])
https://msdn.microsoft.com/en-us/library/dd270695(v=vs.110).aspx