Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All
Expand Minimize

TaskFactory.ContinueWhenAll Method (Task(), Action(Of Task()), CancellationToken)

Creates a continuation task that starts when a set of specified tasks has completed.

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

Public Function ContinueWhenAll ( _
	tasks As Task(), _
	continuationAction As Action(Of Task()), _
	cancellationToken As CancellationToken _
) As Task


Type: System.Threading.Tasks.Task()

The array of tasks from which to continue.

Type: System.Action(Of Task())

The action delegate to execute when all tasks in the tasks array have completed.

Type: System.Threading.CancellationToken

The cancellation token to assign to the new continuation task.

Return Value

Type: System.Threading.Tasks.Task
The new continuation task.


An element in the tasks array has been disposed.


The CancellationTokenSource that created cancellationToken has already been disposed.


The tasks array is Nothing.


The continuationAction argument is Nothing.


The tasks array is empty or contains a null value.

The ContinueWhenAll(Task(), Action(Of Task()), CancellationToken) method executes the continuationAction delegate when all tasks in the tasks array have completed, regardless of their completion status.

The following example creates a cancellation token, which it passes to separate tasks that use a regular expression to count the number of words in a set of text files. The cancellation token is set if a file cannot be found. The ContinueWhenAll method is used to launch a task that displays the total word count when all the antecedent tasks have completed. If the cancellation token is set, which indicates that one or more tasks have been cancelled, it handles the AggregateException exception and displays an error message.

Imports System.Collections.Generic
Imports System.IO
Imports System.Threading
Imports System.Threading.Tasks
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim filenames() As String= { "chapter1.txt", "chapter2.txt", 
                                   "chapter3.txt", "chapter4.txt",
                                   "chapter5.txt" }
      Dim pattern As String = "\b\w+\b" 
      Dim tasks As New List(Of Task)()  
      Dim source As New CancellationTokenSource()
      Dim token As CancellationToken = source.Token
      Dim totalWords As Integer = 0

      ' Determine the number of words in each file. 
      For Each filename In filenames
         tasks.Add( Task.Factory.StartNew( Sub(obj As Object)
                                              Dim fn As String = CStr(obj)
                                              If Not File.Exists(fn) Then 
                                              End If         

                                              Dim sr As New StreamReader(fn.ToString())
                                              Dim content As String = sr.ReadToEnd()
                                              Dim words As Integer = Regex.Matches(content, pattern).Count
                                              Interlocked.Add(totalWords, words) 
                                              Console.WriteLine("{0,-25} {1,6:N0} words", fn, words) 
                                           End Sub, filename, token))

      Dim finalTask As Task = Task.Factory.ContinueWhenAll(tasks.ToArray(), 
                                                           Sub(wordCountTasks As Task())
                                                              If Not token.IsCancellationRequested Then 
                                                                 Console.WriteLine("\n{0,-25} {1,6} total words\n", 
                                                                                   String.Format("{0} files", wordCountTasks.Length), 
                                                              End If                       
                                                           End Sub, token) 
      Catch ae As AggregateException 
         For Each inner In ae.InnerExceptions
            If TypeOf inner Is TaskCanceledException
               Console.WriteLine("Failure to determine total word count: a task was cancelled.")
               Console.WriteLine("Failure caused by {0}", inner.GetType().Name)
            End If  
      End Try                                                                      
   End Sub 
End Module 
' The example displays output like the following: 
'       chapter2.txt               1,585 words 
'       chapter1.txt               4,012 words 
'       Failure to determine total word count: a task was cancelled.

.NET Framework

Supported in: 4.6, 4.5, 4

.NET Framework Client Profile

Supported in: 4

Portable Class Library

Supported in: Portable Class Library

Supported in: Windows Phone 8.1

Supported in: Windows Phone Silverlight 8.1

Supported in: Windows Phone Silverlight 8
© 2015 Microsoft