WaitAll Method (Task[])

Task.WaitAll Method (Task())


Waits for all of the provided Task objects to complete execution.

Namespace:   System.Threading.Tasks
Assembly:  mscorlib (in mscorlib.dll)

Public Shared Sub WaitAll (
	ParamArray tasks As Task()


Type: System.Threading.Tasks.Task()

An array of Task instances on which to wait.

Exception Condition

One or more of the Task objects in tasks has been disposed.


The tasks argument is null.


The tasks argument contains a null element.


At least one of the Task instances was canceled. If a task was canceled, the AggregateException exception contains an OperationCanceledException exception in its AggregateException.InnerExceptions collection.


An exception was thrown during the execution of at least one of the Task instances.

The following example demonstrates using WaitAll to wait for a set of tasks to complete.

Imports System.Threading
Imports System.Threading.Tasks

Module WaitAllDemo
    ' Demonstrated features:
    '   Task.Factory
    '   Task.Result
    '   Task group manipulation
    '   Exception handling
    ' Expected results:
    '   10 tasks are started, each passed an index as a state object.
    '   The tasks that receive an argument between 2 and 5 throw exceptions.
    '   Task.WaitAll() wraps all exceptions in an AggregateException and propagates it to the main thread.
    ' Documentation:
    '   http://msdn.microsoft.com/en-us/library/system.threading.tasks.taskfactory_members(VS.100).aspx
    Sub Main()
        ' Define a delegate that prints and returns the system tick count
        Dim action As Func(Of Object, Integer) = Function(obj As Object)
                                                     Dim i As Integer = CInt(obj)

                                                     ' Make each thread sleep a different time in order to return a different tick count
                                                     Thread.Sleep(i * 100)

                                                     ' The tasks that receive an argument between 2 and 5 throw exceptions
                                                     If 2 <= i AndAlso i <= 5 Then
                                                         Throw New InvalidOperationException("SIMULATED EXCEPTION")
                                                     End If

                                                     Dim tickCount As Integer = Environment.TickCount
                                                     Console.WriteLine("Task={0}, i={1}, TickCount={2}, Thread={3}", Task.CurrentId, i, tickCount, Thread.CurrentThread.ManagedThreadId)

                                                     Return tickCount
                                                 End Function

        Const n As Integer = 10

        ' Construct started tasks
        Dim tasks As Task(Of Integer)() = New Task(Of Integer)(n - 1) {}
        For i As Integer = 0 To n - 1
            tasks(i) = Task(Of Integer).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.
            ' Wait for all the tasks to finish.

            ' We should never get to this point
            Console.WriteLine("WaitAll() has not thrown exceptions. THIS WAS NOT EXPECTED.")
        Catch e As AggregateException
            Console.WriteLine(vbLf & "The following exceptions have been thrown by WaitAll(): (THIS WAS EXPECTED)")
            For j As Integer = 0 To e.InnerExceptions.Count - 1
                Console.WriteLine(vbLf & "-------------------------------------------------" & vbLf & "{0}", e.InnerExceptions(j).ToString())
        End Try
    End Sub

End Module

Universal Windows Platform
Available since 4.5
.NET Framework
Available since 4.0
Portable Class Library
Supported in: portable .NET platforms
Available since 5.0
Windows Phone Silverlight
Available since 8.0
Windows Phone
Available since 8.1
Return to top
© 2015 Microsoft