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
Assembly:  mscorlib (in mscorlib.dll)

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

Parameters

tasks
Type: System.Threading.Tasks.Task()

The array of tasks from which to continue.

continuationAction
Type: System.Action(Of Task())

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

cancellationToken
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.

ExceptionCondition
ObjectDisposedException

An element in the tasks array has been disposed.

-or-

The CancellationTokenSource that created cancellationToken has already been disposed.

ArgumentNullException

The tasks array is Nothing.

-or-

The continuationAction argument is Nothing.

ArgumentException

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)
                                              token.ThrowIfCancellationRequested() 
                                              If Not File.Exists(fn) Then 
                                                 source.Cancel()
                                                 token.ThrowIfCancellationRequested()
                                              End If         

                                              Dim sr As New StreamReader(fn.ToString())
                                              Dim content As String = sr.ReadToEnd()
                                              sr.Close()
                                              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))
      Next 

      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), 
                                                                                   totalWords)
                                                              End If                       
                                                           End Sub, token) 
      Try                                                    
         finalTask.Wait()
      Catch ae As AggregateException 
         For Each inner In ae.InnerExceptions
            Console.WriteLine()
            If TypeOf inner Is TaskCanceledException
               Console.WriteLine("Failure to determine total word count: a task was cancelled.")
            Else
               Console.WriteLine("Failure caused by {0}", inner.GetType().Name)
            End If  
         Next            
      Finally
         source.Dispose()
      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.5, 4

.NET Framework Client Profile

Supported in: 4

Portable Class Library

Supported in: Portable Class Library

.NET for Windows Store apps

Supported in: Windows 8

.NET for Windows Phone apps

Supported in: Windows Phone 8.1, Windows Phone Silverlight 8.1, Windows Phone Silverlight 8

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Show:
© 2014 Microsoft