Task<TResult>.ContinueWith 方法

定義

建立其他工作完成時執行的接續工作。Creates a continuation task that executes when another task completes.

多載

ContinueWith(Action<Task<TResult>,Object>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler)

建立目標 Task<TResult> 完成時執行的接續工作。Creates a continuation that executes when the target Task<TResult> completes.

ContinueWith(Action<Task<TResult>>, CancellationToken, TaskContinuationOptions, TaskScheduler)

建立會根據 continuationOptions 中指定的條件執行的接續。Creates a continuation that executes according the condition specified in continuationOptions.

ContinueWith(Action<Task<TResult>,Object>, Object, TaskScheduler)

建立目標 Task<TResult> 完成時執行的接續工作。Creates a continuation that executes when the target Task<TResult> completes.

ContinueWith(Action<Task<TResult>,Object>, Object, CancellationToken)

建立目標 Task<TResult> 完成時執行的接續工作。Creates a continuation that executes when the target Task<TResult> completes.

ContinueWith(Action<Task<TResult>,Object>, Object, TaskContinuationOptions)

建立目標 Task<TResult> 完成時執行的接續工作。Creates a continuation that executes when the target Task<TResult> completes.

ContinueWith(Action<Task<TResult>>, TaskContinuationOptions)

建立會根據 continuationOptions 中指定的條件執行的接續。Creates a continuation that executes according the condition specified in continuationOptions.

ContinueWith(Action<Task<TResult>>, CancellationToken)

建立當目標 Task<TResult> 完成時非同步執行的可取消接續。Creates a cancelable continuation that executes asynchronously when the target Task<TResult> completes.

ContinueWith(Action<Task<TResult>,Object>, Object)

建立當目標 Task<TResult> 完成時,會接收狀態資訊並執行的接續。Creates a continuation that is passed state information and that executes when the target Task<TResult> completes.

ContinueWith(Action<Task<TResult>>)

建立當目標工作完成時非同步執行的接續。Creates a continuation that executes asynchronously when the target task completes.

ContinueWith(Action<Task<TResult>>, TaskScheduler)

建立當目標 Task<TResult> 完成時非同步執行的接續。Creates a continuation that executes asynchronously when the target Task<TResult> completes.

ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler)

建立目標 Task<TResult> 完成時執行的接續工作。Creates a continuation that executes when the target Task<TResult> completes.

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

建立會根據 continuationOptions 中指定的條件執行的接續。Creates a continuation that executes according the condition specified in continuationOptions.

ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, TaskScheduler)

建立目標 Task<TResult> 完成時執行的接續工作。Creates a continuation that executes when the target Task<TResult> completes.

ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, TaskContinuationOptions)

建立目標 Task<TResult> 完成時執行的接續工作。Creates a continuation that executes when the target Task<TResult> completes.

ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, CancellationToken)

建立目標 Task<TResult> 完成時執行的接續工作。Creates a continuation that executes when the target Task<TResult> completes.

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, TaskContinuationOptions)

建立會根據 continuationOptions 中指定的條件執行的接續。Creates a continuation that executes according the condition specified in continuationOptions.

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, CancellationToken)

建立當目標 Task<TResult> 完成時非同步執行的接續。Creates a continuation that executes asynchronously when the target Task<TResult> completes.

ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object)

建立目標 Task<TResult> 完成時執行的接續工作。Creates a continuation that executes when the target Task<TResult> completes.

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>)

建立當目標 Task<TResult> 完成時非同步執行的接續。Creates a continuation that executes asynchronously when the target Task<TResult> completes.

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, TaskScheduler)

建立當目標 Task<TResult> 完成時非同步執行的接續。Creates a continuation that executes asynchronously when the target Task<TResult> completes.

ContinueWith(Action<Task<TResult>,Object>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler)

建立目標 Task<TResult> 完成時執行的接續工作。Creates a continuation that executes when the target Task<TResult> completes.

public:
 System::Threading::Tasks::Task ^ ContinueWith(Action<System::Threading::Tasks::Task<TResult> ^, System::Object ^> ^ continuationAction, System::Object ^ state, System::Threading::CancellationToken cancellationToken, System::Threading::Tasks::TaskContinuationOptions continuationOptions, System::Threading::Tasks::TaskScheduler ^ scheduler);
public System.Threading.Tasks.Task ContinueWith (Action<System.Threading.Tasks.Task<TResult>,object> continuationAction, object state, System.Threading.CancellationToken cancellationToken, System.Threading.Tasks.TaskContinuationOptions continuationOptions, System.Threading.Tasks.TaskScheduler scheduler);
override this.ContinueWith : Action<System.Threading.Tasks.Task<'Result>, obj> * obj * System.Threading.CancellationToken * System.Threading.Tasks.TaskContinuationOptions * System.Threading.Tasks.TaskScheduler -> System.Threading.Tasks.Task

參數

continuationAction
Action<Task<TResult>,Object>

Task<TResult> 完成時要執行的動作。An action to run when the Task<TResult> completes. 當執行時,完成的工作會傳遞至委派,並以呼叫端提供狀態的物件做為引數。When run, the delegate will be passed the completed task and the caller-supplied state object as arguments.

state
Object

物件,表示接續動作所使用的資料。An object representing data to be used by the continuation action.

cancellationToken
CancellationToken

要指派給新接續工作的 CancellationTokenThe CancellationToken that will be assigned to the new continuation task.

continuationOptions
TaskContinuationOptions

接續工作的排程時間及其行為方式的適用選項。Options for when the continuation is scheduled and how it behaves. 這包含準則 (如 OnlyOnCanceled) 和執行選項 (如 ExecuteSynchronously)。This includes criteria, such as OnlyOnCanceled, as well as execution options, such as ExecuteSynchronously.

scheduler
TaskScheduler

要與接續工作產生關聯且於執行時使用的 TaskSchedulerThe TaskScheduler to associate with the continuation task and to use for its execution.

傳回

新的接續 TaskA new continuation Task.

例外狀況

scheduler 引數為 nullThe scheduler argument is null.

continuationOptions 引數指定的 TaskContinuationOptions 值不正確。The continuationOptions argument specifies an invalid value for TaskContinuationOptions.

已經處置所提供的 CancellationTokenThe provided CancellationToken has already been disposed.

備註

傳回Task的不會排程執行, 直到目前的工作完成為止。The returned Task will not be scheduled for execution until the current task has completed. 如果不符合透過continuationOptions參數指定的準則, 將會取消接續工作, 而不是排程。If the criteria specified through the continuationOptions parameter are not met, the continuation task will be canceled instead of scheduled.

另請參閱

ContinueWith(Action<Task<TResult>>, CancellationToken, TaskContinuationOptions, TaskScheduler)

建立會根據 continuationOptions 中指定的條件執行的接續。Creates a continuation that executes according the condition specified in continuationOptions.

public:
 System::Threading::Tasks::Task ^ ContinueWith(Action<System::Threading::Tasks::Task<TResult> ^> ^ continuationAction, System::Threading::CancellationToken cancellationToken, System::Threading::Tasks::TaskContinuationOptions continuationOptions, System::Threading::Tasks::TaskScheduler ^ scheduler);
public System.Threading.Tasks.Task ContinueWith (Action<System.Threading.Tasks.Task<TResult>> continuationAction, System.Threading.CancellationToken cancellationToken, System.Threading.Tasks.TaskContinuationOptions continuationOptions, System.Threading.Tasks.TaskScheduler scheduler);
override this.ContinueWith : Action<System.Threading.Tasks.Task<'Result>> * System.Threading.CancellationToken * System.Threading.Tasks.TaskContinuationOptions * System.Threading.Tasks.TaskScheduler -> System.Threading.Tasks.Task

參數

continuationAction
Action<Task<TResult>>

要根據 continuationOptions 中指定之條件執行的動作。An action to run according the condition specified in continuationOptions. 執行時,會將已完成的工作當做引數傳遞給委派。When run, the delegate will be passed the completed task as an argument.

cancellationToken
CancellationToken

要指派給新接續工作的 CancellationTokenThe CancellationToken that will be assigned to the new continuation task.

continuationOptions
TaskContinuationOptions

接續工作的排程時間及其行為方式的適用選項。Options for when the continuation is scheduled and how it behaves. 這包含準則 (如 OnlyOnCanceled) 和執行選項 (如 ExecuteSynchronously)。This includes criteria, such as OnlyOnCanceled, as well as execution options, such as ExecuteSynchronously.

scheduler
TaskScheduler

要與接續工作產生關聯且於執行時使用的 TaskSchedulerThe TaskScheduler to associate with the continuation task and to use for its execution.

傳回

新的接續 TaskA new continuation Task.

例外狀況

Task<TResult> 已經處置。The Task<TResult> has been disposed.

-或--or- 已處置建立 cancellationTokenCancellationTokenSourceThe CancellationTokenSource that created cancellationToken has already been disposed.

continuationAction 引數為 nullThe continuationAction argument is null.

-或--or- scheduler 引數為 nullThe scheduler argument is null.

continuationOptions 引數指定的 TaskContinuationOptions 值不正確。The continuationOptions argument specifies an invalid value for TaskContinuationOptions.

備註

傳回Task的不會排程執行, 直到目前的工作完成為止。The returned Task will not be scheduled for execution until the current task has completed. 如果不符合透過continuationOptions參數指定的準則, 將會取消接續工作, 而不是排程。If the criteria specified through the continuationOptions parameter are not met, the continuation task will be canceled instead of scheduled. 如需詳細資訊,請參閱使用接續工作鏈結工作For more information, see Chaining Tasks by Using Continuation Tasks.

另請參閱

ContinueWith(Action<Task<TResult>,Object>, Object, TaskScheduler)

建立目標 Task<TResult> 完成時執行的接續工作。Creates a continuation that executes when the target Task<TResult> completes.

public:
 System::Threading::Tasks::Task ^ ContinueWith(Action<System::Threading::Tasks::Task<TResult> ^, System::Object ^> ^ continuationAction, System::Object ^ state, System::Threading::Tasks::TaskScheduler ^ scheduler);
public System.Threading.Tasks.Task ContinueWith (Action<System.Threading.Tasks.Task<TResult>,object> continuationAction, object state, System.Threading.Tasks.TaskScheduler scheduler);
override this.ContinueWith : Action<System.Threading.Tasks.Task<'Result>, obj> * obj * System.Threading.Tasks.TaskScheduler -> System.Threading.Tasks.Task
Public Function ContinueWith (continuationAction As Action(Of Task(Of TResult), Object), state As Object, scheduler As TaskScheduler) As Task

參數

continuationAction
Action<Task<TResult>,Object>

Task<TResult> 完成時要執行的動作。An action to run when the Task<TResult> completes. 當執行時,完成的工作會傳遞至委派,並以呼叫端提供狀態的物件做為引數。When run, the delegate will be passed the completed task and the caller-supplied state object as arguments.

state
Object

物件,表示接續動作所使用的資料。An object representing data to be used by the continuation action.

scheduler
TaskScheduler

要與接續工作產生關聯且於執行時使用的 TaskSchedulerThe TaskScheduler to associate with the continuation task and to use for its execution.

傳回

新的接續 TaskA new continuation Task.

例外狀況

scheduler 引數為 nullThe scheduler argument is null.

備註

傳回Task的將不會排程執行, 直到目前的工作完成為止、它是否因為順利執行而完成、因未處理的例外狀況而發生錯誤, 或是因為取消而提前結束。The returned Task will not be scheduled for execution until the current task has completed, whether it completes due to running to completion successfully, faulting due to an unhandled exception, or exiting out early due to being canceled.

另請參閱

ContinueWith(Action<Task<TResult>,Object>, Object, CancellationToken)

建立目標 Task<TResult> 完成時執行的接續工作。Creates a continuation that executes when the target Task<TResult> completes.

public:
 System::Threading::Tasks::Task ^ ContinueWith(Action<System::Threading::Tasks::Task<TResult> ^, System::Object ^> ^ continuationAction, System::Object ^ state, System::Threading::CancellationToken cancellationToken);
public System.Threading.Tasks.Task ContinueWith (Action<System.Threading.Tasks.Task<TResult>,object> continuationAction, object state, System.Threading.CancellationToken cancellationToken);
override this.ContinueWith : Action<System.Threading.Tasks.Task<'Result>, obj> * obj * System.Threading.CancellationToken -> System.Threading.Tasks.Task

參數

continuationAction
Action<Task<TResult>,Object>

Task<TResult> 完成時要執行的動作。An action to run when the Task<TResult> completes. 當執行時,完成的工作會傳遞至委派,並以呼叫端提供狀態的物件做為引數。When run, the delegate will be passed the completed task and the caller-supplied state object as arguments.

state
Object

物件,表示接續動作所使用的資料。An object representing data to be used by the continuation action.

cancellationToken
CancellationToken

要指派給新接續工作的 CancellationTokenThe CancellationToken that will be assigned to the new continuation task.

傳回

新的接續 TaskA new continuation Task.

例外狀況

continuationAction 引數為 nullThe continuationAction argument is null.

已經處置所提供的 CancellationTokenThe provided CancellationToken has already been disposed.

備註

傳回Task的將不會排程執行, 直到目前的工作完成為止、它是否因為順利執行而完成、因未處理的例外狀況而發生錯誤, 或是因為取消而提前結束。The returned Task will not be scheduled for execution until the current task has completed, whether it completes due to running to completion successfully, faulting due to an unhandled exception, or exiting out early due to being canceled.

另請參閱

ContinueWith(Action<Task<TResult>,Object>, Object, TaskContinuationOptions)

建立目標 Task<TResult> 完成時執行的接續工作。Creates a continuation that executes when the target Task<TResult> completes.

public:
 System::Threading::Tasks::Task ^ ContinueWith(Action<System::Threading::Tasks::Task<TResult> ^, System::Object ^> ^ continuationAction, System::Object ^ state, System::Threading::Tasks::TaskContinuationOptions continuationOptions);
public System.Threading.Tasks.Task ContinueWith (Action<System.Threading.Tasks.Task<TResult>,object> continuationAction, object state, System.Threading.Tasks.TaskContinuationOptions continuationOptions);
override this.ContinueWith : Action<System.Threading.Tasks.Task<'Result>, obj> * obj * System.Threading.Tasks.TaskContinuationOptions -> System.Threading.Tasks.Task
Public Function ContinueWith (continuationAction As Action(Of Task(Of TResult), Object), state As Object, continuationOptions As TaskContinuationOptions) As Task

參數

continuationAction
Action<Task<TResult>,Object>

Task<TResult> 完成時要執行的動作。An action to run when the Task<TResult> completes. 當執行時,完成的工作會傳遞至委派,並以呼叫端提供狀態的物件做為引數。When run, the delegate will be passed the completed task and the caller-supplied state object as arguments.

state
Object

物件,表示接續動作所使用的資料。An object representing data to be used by the continuation action.

continuationOptions
TaskContinuationOptions

接續工作的排程時間及其行為方式的適用選項。Options for when the continuation is scheduled and how it behaves. 這包含準則 (如 OnlyOnCanceled) 和執行選項 (如 ExecuteSynchronously)。This includes criteria, such as OnlyOnCanceled, as well as execution options, such as ExecuteSynchronously.

傳回

新的接續 TaskA new continuation Task.

例外狀況

continuationAction 引數為 nullThe continuationAction argument is null.

continuationOptions 引數指定的 TaskContinuationOptions 值不正確。The continuationOptions argument specifies an invalid value for TaskContinuationOptions.

備註

傳回Task的不會排程執行, 直到目前的工作完成為止。The returned Task will not be scheduled for execution until the current task has completed. 如果不符合透過continuationOptions參數指定的接續準則, 將會取消接續工作, 而不是排程。If the continuation criteria specified through the continuationOptions parameter are not met, the continuation task will be canceled instead of scheduled.

另請參閱

ContinueWith(Action<Task<TResult>>, TaskContinuationOptions)

建立會根據 continuationOptions 中指定的條件執行的接續。Creates a continuation that executes according the condition specified in continuationOptions.

public:
 System::Threading::Tasks::Task ^ ContinueWith(Action<System::Threading::Tasks::Task<TResult> ^> ^ continuationAction, System::Threading::Tasks::TaskContinuationOptions continuationOptions);
public System.Threading.Tasks.Task ContinueWith (Action<System.Threading.Tasks.Task<TResult>> continuationAction, System.Threading.Tasks.TaskContinuationOptions continuationOptions);
override this.ContinueWith : Action<System.Threading.Tasks.Task<'Result>> * System.Threading.Tasks.TaskContinuationOptions -> System.Threading.Tasks.Task
Public Function ContinueWith (continuationAction As Action(Of Task(Of TResult)), continuationOptions As TaskContinuationOptions) As Task

參數

continuationAction
Action<Task<TResult>>

要根據 continuationOptions 中指定之條件執行的動作。An action to according the condition specified in continuationOptions. 執行時,會將已完成的工作當做引數傳遞給委派。When run, the delegate will be passed the completed task as an argument.

continuationOptions
TaskContinuationOptions

接續工作的排程時間及其行為方式的適用選項。Options for when the continuation is scheduled and how it behaves. 這包含準則 (如 OnlyOnCanceled) 和執行選項 (如 ExecuteSynchronously)。This includes criteria, such as OnlyOnCanceled, as well as execution options, such as ExecuteSynchronously.

傳回

新的接續 TaskA new continuation Task.

例外狀況

Task<TResult> 已經處置。The Task<TResult> has been disposed.

continuationAction 引數為 nullThe continuationAction argument is null.

continuationOptions 引數指定的 TaskContinuationOptions 值不正確。The continuationOptions argument specifies an invalid value for TaskContinuationOptions.

備註

傳回Task的不會排程執行, 直到目前的工作完成為止。The returned Task will not be scheduled for execution until the current task has completed. 如果不符合透過continuationOptions參數指定的接續準則, 將會取消接續工作, 而不是排程。If the continuation criteria specified through the continuationOptions parameter are not met, the continuation task will be canceled instead of scheduled.

如需詳細資訊,請參閱使用接續工作鏈結工作For more information, see Chaining Tasks by Using Continuation Tasks.

另請參閱

ContinueWith(Action<Task<TResult>>, CancellationToken)

建立當目標 Task<TResult> 完成時非同步執行的可取消接續。Creates a cancelable continuation that executes asynchronously when the target Task<TResult> completes.

public:
 System::Threading::Tasks::Task ^ ContinueWith(Action<System::Threading::Tasks::Task<TResult> ^> ^ continuationAction, System::Threading::CancellationToken cancellationToken);
public System.Threading.Tasks.Task ContinueWith (Action<System.Threading.Tasks.Task<TResult>> continuationAction, System.Threading.CancellationToken cancellationToken);
override this.ContinueWith : Action<System.Threading.Tasks.Task<'Result>> * System.Threading.CancellationToken -> System.Threading.Tasks.Task

參數

continuationAction
Action<Task<TResult>>

Task<TResult> 完成時要執行的動作。An action to run when the Task<TResult> completes. 執行時,會將已完成的工作當做引數傳遞給委派。When run, the delegate is passed the completed task as an argument.

cancellationToken
CancellationToken

要傳遞給新接續工作的取消權杖。The cancellation token that is passed to the new continuation task.

傳回

新的接續工作。A new continuation task.

例外狀況

Task<TResult> 已經處置。The Task<TResult> has been disposed.

-或--or- 已處置建立 cancellationTokenCancellationTokenSourceThe CancellationTokenSource that created cancellationToken has been disposed.

continuationAction 引數為 nullThe continuationAction argument is null.

範例

下列範例會建立一個使用 Eratosthenes Eratosthenes 的 antecedent 工作, 來計算介於1和使用者輸入值之間的質數。The following example creates an antecedent task that uses the Sieve of Eratosthenes to calculate the prime numbers between 1 and a value entered by the user. 陣列用來保存質數的相關資訊。An array is used to hold information about the prime numbers. 陣列索引代表數位, 而元素的值指出該數位是複合的 (其值為true) 或質數 (其值為false)。The array index represents the number, and the element's value indicates whether that number is composite (its value is true) or prime (its value is false). 這項工作接著會傳遞至接續工作, 負責從整數陣列中解壓縮質數並加以顯示。This task is then passed to a continuation task, which is responsible for extracting the prime numbers from the integer array and displaying them.

解除標記會傳遞至 antecedent 和接續工作。A cancellation token is passed to both the antecedent and the continuation task. System.Timers.Timer物件是用來定義100毫秒的超時值。A System.Timers.Timer object is used to define a timeout value of 100 milliseconds. 如果引發事件, CancellationTokenSource.Cancel則會呼叫方法, 並使用解除標記來要求取消工作。If the event fires, the CancellationTokenSource.Cancel method is called, and the cancellation token is used to request cancellation of the tasks.

using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Timers = System.Timers;

public class Example
{
   static CancellationTokenSource ts;
   
   public static void Main(string[] args)
   {
      int upperBound = args.Length >= 1 ? Int32.Parse(args[0]) : 200;
      ts = new CancellationTokenSource();
      CancellationToken token = ts.Token;
      Timers.Timer timer = new Timers.Timer(3000);
      timer.Elapsed += TimedOutEvent;
      timer.AutoReset = false;
      timer.Enabled = true;

      var t1 = Task.Run(() => { // True = composite.
                                // False = prime.
                                bool[] values = new bool[upperBound + 1];
                                for (int ctr = 2; ctr <= (int) Math.Sqrt(upperBound); ctr++) {
                                   if (values[ctr] == false) {
                                      for (int product = ctr * ctr; product <= upperBound;
                                                                    product = product + ctr)
                                         values[product] = true;
                                   }
                                   token.ThrowIfCancellationRequested();
                                }
                                return values; }, token);

      var t2 = t1.ContinueWith( (antecedent) => { // Create a list of prime numbers.
                                                  var  primes = new List<int>();
                                                  token.ThrowIfCancellationRequested();
                                                  bool[] numbers = antecedent.Result;
                                                  string output = String.Empty;

                                                  for (int ctr = 1; ctr <= numbers.GetUpperBound(0); ctr++)
                                                     if (numbers[ctr] == false)
                                                        primes.Add(ctr);

                                                  // Create the output string.
                                                  for (int ctr = 0; ctr < primes.Count; ctr++) {
                                                     token.ThrowIfCancellationRequested();
                                                     output += primes[ctr].ToString("N0");
                                                     if (ctr < primes.Count - 1)
                                                        output += ",  ";
                                                     if ((ctr + 1) % 8 == 0)
                                                        output += Environment.NewLine;
                                                  }
                                                  //Display the result.
                                                  Console.WriteLine("Prime numbers from 1 to {0}:\n",
                                                                    upperBound);
                                                  Console.WriteLine(output);
                                                }, token);
      try {
         t2.Wait();
      }
      catch (AggregateException ae) {
         foreach (var e in ae.InnerExceptions) {
            if (e.GetType() == typeof(TaskCanceledException))
               Console.WriteLine("The operation was cancelled.");
            else
               Console.WriteLine("ELSE: {0}: {1}", e.GetType().Name, e.Message);
         }
      }
      finally {
         ts.Dispose();
      }
   }

   private static void TimedOutEvent(Object source, Timers.ElapsedEventArgs e)
   {
      ts.Cancel();
   }
}
// If cancellation is not requested, the example displays output like the following:
//       Prime numbers from 1 to 400:
//
//       1,  2,  3,  5,  7,  11,  13,  17,
//       19,  23,  29,  31,  37,  41,  43,  47,
//       53,  59,  61,  67,  71,  73,  79,  83,
//       89,  97,  101,  103,  107,  109,  113,  127,
//       131,  137,  139,  149,  151,  157,  163,  167,
//       173,  179,  181,  191,  193,  197,  199,  211,
//       223,  227,  229,  233,  239,  241,  251,  257,
//       263,  269,  271,  277,  281,  283,  293,  307,
//       311,  313,  317,  331,  337,  347,  349,  353,
//       359,  367,  373,  379,  383,  389,  397,  401
// If cancellation is requested, the example displays output like the following:
//       The operation was cancelled.
Imports System.Collections.Generic
Imports System.Threading
Imports System.Threading.Tasks
Imports Timers = System.Timers

Module Example
   Dim ts As CancellationTokenSource

   Public Sub Main(args() As String)
      Dim upperBound As Integer = If(args.Length >= 1, CInt(args(0)), 200)
      ts = New CancellationTokenSource()
      Dim token As CancellationToken = ts.Token
      Dim timer As New Timers.Timer(100)
      AddHandler timer.Elapsed, AddressOf TimedOutEvent
      timer.AutoReset = False
      timer.Enabled = True

      Dim t1 = Task.Run(Function()
                          ' True = composite.
                          ' False = prime.
                          Dim values(upperBound) As Boolean
                          For ctr = 2 To CInt(Math.Sqrt(upperBound))
                             If values(ctr) = False Then
                                For product = ctr * ctr To upperBound Step ctr
                                   values(product) = True
                                Next
                             End If
                             token.ThrowIfCancellationRequested()
                          Next
                          Return values
                       End Function, token)

      Dim t2 = t1.ContinueWith(Sub(antecedent)
                                  ' Create a list of prime numbers.
                                  Dim primes As New List(Of Integer)()
                                  token.ThrowIfCancellationRequested()
                                  Dim numbers As Boolean() = antecedent.Result
                                  Dim output As String = String.Empty
                                  
                                  For ctr As Integer = 1 To numbers.GetUpperBound(0)
                                     If numbers(ctr) = False Then primes.Add(ctr)
                                  Next

                                  ' Create the output string.
                                  For ctr As Integer = 0 To primes.Count - 1
                                     token.ThrowIfCancellationRequested()
                                     output += primes(ctr).ToString("N0")
                                     If ctr < primes.Count - 1 Then output += ",  "
                                     If (ctr + 1) Mod 8 = 0 Then output += vbCrLf
                                  Next
                                  'Display the result.
                                  Console.WriteLine("Prime numbers from 1 to {0}:{1}",
                                                    upperBound, vbCrLf)
                                  Console.WriteLine(output)
                               End Sub, token)
      Try
         t2.Wait()
      Catch ae As AggregateException
         For Each e In ae.InnerExceptions
            If e.GetType Is GetType(TaskCanceledException) Then
               Console.WriteLine("The operation was cancelled.")
            Else
               Console.WriteLine("{0}: {1}", e.GetType().Name, e.Message)
            End If
         Next
      Finally
         ts.Dispose()
      End Try
   End Sub
   
   Private Sub TimedOutEvent(source As Object, e As Timers.ElapsedEventArgs)
      ts.Cancel()
   End Sub
End Module
' If cancellation is not requested, the example displays output like the following:
'       Prime numbers from 1 to 400:
'
'       1,  2,  3,  5,  7,  11,  13,  17,
'       19,  23,  29,  31,  37,  41,  43,  47,
'       53,  59,  61,  67,  71,  73,  79,  83,
'       89,  97,  101,  103,  107,  109,  113,  127,
'       131,  137,  139,  149,  151,  157,  163,  167,
'       173,  179,  181,  191,  193,  197,  199,  211,
'       223,  227,  229,  233,  239,  241,  251,  257,
'       263,  269,  271,  277,  281,  283,  293,  307,
'       311,  313,  317,  331,  337,  347,  349,  353,
'       359,  367,  373,  379,  383,  389,  397,  401
' If cancellation is requested, the example displays output like the following:
'       The operation was cancelled.

通常, 提供約100000的值會導致逾時間隔到期, 以及要Timer.Elapsed引發的事件, 以及要設定的取消要求。Typically, supplying a value of about 100,000 causes the timeout interval to expire and the Timer.Elapsed event to fire, and the cancellation request to be set.

備註

傳回Task的將不會排程執行, 直到目前的工作完成為止、它是否因為順利執行而完成、因未處理的例外狀況而發生錯誤, 或是因為取消而提前結束。The returned Task will not be scheduled for execution until the current task has completed, whether it completes due to running to completion successfully, faulting due to an unhandled exception, or exiting out early due to being canceled.

另請參閱

ContinueWith(Action<Task<TResult>,Object>, Object)

建立當目標 Task<TResult> 完成時,會接收狀態資訊並執行的接續。Creates a continuation that is passed state information and that executes when the target Task<TResult> completes.

public:
 System::Threading::Tasks::Task ^ ContinueWith(Action<System::Threading::Tasks::Task<TResult> ^, System::Object ^> ^ continuationAction, System::Object ^ state);
public System.Threading.Tasks.Task ContinueWith (Action<System.Threading.Tasks.Task<TResult>,object> continuationAction, object state);
override this.ContinueWith : Action<System.Threading.Tasks.Task<'Result>, obj> * obj -> System.Threading.Tasks.Task
Public Function ContinueWith (continuationAction As Action(Of Task(Of TResult), Object), state As Object) As Task

參數

continuationAction
Action<Task<TResult>,Object>

Task<TResult> 完成時要執行的動作。An action to run when the Task<TResult> completes. 執行時,會將已完成的工作和呼叫端提供的狀態物件當做引數傳遞給委派。When run, the delegate is passed the completed task and the caller-supplied state object as arguments.

state
Object

物件,表示接續動作所使用的資料。An object representing data to be used by the continuation action.

傳回

新的接續 TaskA new continuation Task.

例外狀況

continuationAction 引數為 nullThe continuationAction argument is null.

範例

下列範例會建立一個在2到20之間傳遞整數的工作, 並傳回一個陣列, 其中包含該數位的前10個指數 (從 n1到 n10)。The following example creates a task that is passed an integer between 2 and 20 and returns an array that contains the first ten exponents (from n1 to n10) of that number. 接著, 接續工作會負責顯示指數。A continuation task is then responsible for displaying the exponents. 這兩個值會同時傳遞到 antecedent 和其指數產生的原始數目。It is passed both the antecedent and the original number whose exponents the antecedent generates.

using System;
using System.Threading;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      var cts = new CancellationTokenSource();
      var token = cts.Token;

      // Get an integer to generate a list of its exponents.
      var rnd = new Random();
      var number = rnd.Next(2, 21);
      
      var t = Task.Factory.StartNew( (value) => { int n = (int) value;
                                                  long[] values = new long[10];
                                                  for (int ctr = 1; ctr <= 10; ctr++)
                                                     values[ctr - 1] = (long) Math.Pow(n, ctr);
                                                     
                                                  return values;
                                                }, number);
      var continuation = t.ContinueWith( (antecedent, value) => { Console.WriteLine("Exponents of {0}:", value);
                                                                  for (int ctr = 0; ctr <= 9; ctr++)
                                                                     Console.WriteLine("   {0} {1} {2} = {3:N0}",
                                                                                       value, "\u02C6", ctr + 1,
                                                                                       antecedent.Result[ctr]);
                                                                  Console.WriteLine();
                                                                }, number);
      continuation.Wait();
      cts.Dispose();
   }
}
// The example displays output like the following:
//       Exponents of 2:
//          2 ^ 1 = 2
//          2 ^ 2 = 4
//          2 ^ 3 = 8
//          2 ^ 4 = 16
//          2 ^ 5 = 32
//          2 ^ 6 = 64
//          2 ^ 7 = 128
//          2 ^ 8 = 256
//          2 ^ 9 = 512
//          2 ^ 10 = 1,024
Imports System.Threading
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim cts As New CancellationTokenSource()
      Dim token As CancellationToken = cts.Token

      ' Get an integer to generate a list of its exponents.
      Dim rnd As New Random()
      Dim number As Integer = rnd.Next(2, 21)

      Dim t = Task.Factory.StartNew( Function(value)
                                        Dim n As Integer = CInt(value)
                                        Dim values(9) As Long
                                        For ctr As Integer = 1 To 10
                                           values(ctr - 1) = CLng(Math.Pow(n, ctr))
                                        Next
                                        return values
                                     End Function, number)
      Dim continuation = t.ContinueWith( Sub(antecedent, value)
                                            Console.WriteLine("Exponents of {0}:", value)
                                            For ctr As Integer = 0 To 9
                                               Console.WriteLine("   {0} {1} {2} = {3:N0}",
                                                                 value, ChrW(&h02C6), ctr + 1,
                                                                 antecedent.Result(ctr))
                                            Next
                                            Console.WriteLine()
                                         End Sub, number)
      continuation.Wait()

      cts.Dispose()
   End Sub
End Module
' The example displays output like the following:
'       Exponents of 2:
'          2 ^ 1 = 2
'          2 ^ 2 = 4
'          2 ^ 3 = 8
'          2 ^ 4 = 16
'          2 ^ 5 = 32
'          2 ^ 6 = 64
'          2 ^ 7 = 128
'          2 ^ 8 = 256
'          2 ^ 9 = 512
'          2 ^ 10 = 1,024

備註

傳回Task的將不會排程執行, 直到目前的工作完成為止、它是否因為順利執行而完成、因未處理的例外狀況而發生錯誤, 或是因為取消而提前結束。The returned Task will not be scheduled for execution until the current task has completed, whether it completes due to running to completion successfully, faulting due to an unhandled exception, or exiting out early due to being canceled.

另請參閱

ContinueWith(Action<Task<TResult>>)

建立當目標工作完成時非同步執行的接續。Creates a continuation that executes asynchronously when the target task completes.

public:
 System::Threading::Tasks::Task ^ ContinueWith(Action<System::Threading::Tasks::Task<TResult> ^> ^ continuationAction);
public System.Threading.Tasks.Task ContinueWith (Action<System.Threading.Tasks.Task<TResult>> continuationAction);
override this.ContinueWith : Action<System.Threading.Tasks.Task<'Result>> -> System.Threading.Tasks.Task
Public Function ContinueWith (continuationAction As Action(Of Task(Of TResult))) As Task

參數

continuationAction
Action<Task<TResult>>

當前項 Task<TResult> 完成時要執行的動作。An action to run when the antecedent Task<TResult> completes. 執行時,會將已完成的工作當做引數傳遞給委派。When run, the delegate will be passed the completed task as an argument.

傳回

新的接續工作。A new continuation task.

例外狀況

Task<TResult> 已經處置。The Task<TResult> has been disposed.

continuationAction 引數為 nullThe continuationAction argument is null.

範例

下列範例會建立一個使用 Eratosthenes Eratosthenes 的 antecedent 工作, 來計算介於1和使用者輸入值之間的質數。The following example creates an antecedent task that uses the Sieve of Eratosthenes to calculate the prime numbers between 1 and a value entered by the user. 陣列用來保存質數的相關資訊。An array is used to hold information about the prime numbers. 陣列索引代表數位, 而元素的值指出該數位是複合的 (其值為true) 或質數 (其值為false)。The array index represents the number, and the element's value indicates whether that number is composite (its value is true) or prime (its value is false). 這項工作接著會傳遞至接續工作, 負責從整數陣列中解壓縮質數並加以顯示。This task is then passed to a continuation task, which is responsible for extracting the prime numbers from the integer array and displaying them.

using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

public class Example
{
   public static void Main(string[] args)
   {
      int upperBound = args.Length >= 1 ? Int32.Parse(args[0]) : 200;

      var t1 = Task.Run(() => { // True = composite.
                                // False = prime.
                                bool[] values = new bool[upperBound + 1];
                                for (int ctr = 2; ctr <= (int) Math.Sqrt(upperBound); ctr++) {
                                   if (values[ctr] == false) {
                                      for (int product = ctr * ctr; product <= upperBound;
                                                                    product = product + ctr)
                                         values[product] = true;
                                   }
                                }
                                return values; });
      var t2 = t1.ContinueWith( (antecedent) => { // Create a list of prime numbers.
                                                  var  primes = new List<int>();
                                                  bool[] numbers = antecedent.Result;
                                                  string output = String.Empty;

                                                  for (int ctr = 1; ctr <= numbers.GetUpperBound(0); ctr++)
                                                     if (numbers[ctr] == false)
                                                        primes.Add(ctr);

                                                  // Create the output string.
                                                  for (int ctr = 0; ctr < primes.Count; ctr++) {
                                                     output += primes[ctr].ToString("N0");
                                                     if (ctr < primes.Count - 1)
                                                        output += ",  ";
                                                     if ((ctr + 1) % 8 == 0)
                                                        output += Environment.NewLine;
                                                  }
                                                  //Display the result.
                                                  Console.WriteLine("Prime numbers from 1 to {0}:\n",
                                                                    upperBound);
                                                  Console.WriteLine(output);
                                                });
      try {
         t2.Wait();
      }
      catch (AggregateException ae) {
         foreach (var e in ae.InnerExceptions)
            Console.WriteLine("{0}: {1}", e.GetType().Name, e.Message);
      }
   }
}
// The example displays output like the following:
//       Prime numbers from 1 to 400:
//
//       1,  2,  3,  5,  7,  11,  13,  17,
//       19,  23,  29,  31,  37,  41,  43,  47,
//       53,  59,  61,  67,  71,  73,  79,  83,
//       89,  97,  101,  103,  107,  109,  113,  127,
//       131,  137,  139,  149,  151,  157,  163,  167,
//       173,  179,  181,  191,  193,  197,  199,  211,
//       223,  227,  229,  233,  239,  241,  251,  257,
//       263,  269,  271,  277,  281,  283,  293,  307,
//       311,  313,  317,  331,  337,  347,  349,  353,
//       359,  367,  373,  379,  383,  389,  397,  401
Imports System.Collections.Generic
Imports System.Threading
Imports System.Threading.Tasks

Module Example
   Public Sub Main(args() As String)
      Dim upperBound As Integer = If(args.Length >= 1, CInt(args(0)), 200)

      Dim t1 = Task.Run(Function()
                          ' True = composite.
                          ' False = prime.
                          Dim values(upperBound) As Boolean
                          For ctr = 2 To CInt(Math.Sqrt(upperBound))
                             If values(ctr) = False Then
                                For product = ctr * ctr To upperBound Step ctr
                                   values(product) = True
                                Next
                             End If
                          Next
                          Return values
                       End Function)

      Dim t2 = t1.ContinueWith(Sub(antecedent)
                                  ' Create a list of prime numbers.
                                  Dim primes As New List(Of Integer)()
                                  Dim numbers As Boolean() = antecedent.Result
                                  Dim output As String = String.Empty
                                  
                                  For ctr As Integer = 1 To numbers.GetUpperBound(0)
                                     If numbers(ctr) = False Then primes.Add(ctr)
                                  Next

                                  ' Create the output string.
                                  For ctr As Integer = 0 To primes.Count - 1
                                     output += primes(ctr).ToString("N0")
                                     If ctr < primes.Count - 1 Then output += ",  "
                                     If (ctr + 1) Mod 8 = 0 Then output += vbCrLf
                                  Next
                                  'Display the result.
                                  Console.WriteLine("Prime numbers from 1 to {0}:{1}",
                                                    upperBound, vbCrLf)
                                  Console.WriteLine(output)
                               End Sub)
      Try
         t2.Wait()
      Catch ae As AggregateException
         For Each e In ae.InnerExceptions
            Console.WriteLine("{0}: {1}", e.GetType().Name, e.Message)
         Next
      End Try
   End Sub
End Module
' The example displays output like the following:
'       Prime numbers from 1 to 400:
'
'       1,  2,  3,  5,  7,  11,  13,  17,
'       19,  23,  29,  31,  37,  41,  43,  47,
'       53,  59,  61,  67,  71,  73,  79,  83,
'       89,  97,  101,  103,  107,  109,  113,  127,
'       131,  137,  139,  149,  151,  157,  163,  167,
'       173,  179,  181,  191,  193,  197,  199,  211,
'       223,  227,  229,  233,  239,  241,  251,  257,
'       263,  269,  271,  277,  281,  283,  293,  307,
'       311,  313,  317,  331,  337,  347,  349,  353,
'       359,  367,  373,  379,  383,  389,  397,  401
' If cancellation is requested, the example displays output like the following:
'       The operation was cancelled.

備註

傳回Task的將不會排程執行, 直到目前的工作完成為止、它是否因為順利執行而完成、因未處理的例外狀況而發生錯誤, 或是因為取消而提前結束為止。The returned Task will not be scheduled for execution until the current task has completed, whether it completes due to running to completion successfully, faulting due to an unhandled exception, or exiting early due to being canceled.

另請參閱

ContinueWith(Action<Task<TResult>>, TaskScheduler)

建立當目標 Task<TResult> 完成時非同步執行的接續。Creates a continuation that executes asynchronously when the target Task<TResult> completes.

public:
 System::Threading::Tasks::Task ^ ContinueWith(Action<System::Threading::Tasks::Task<TResult> ^> ^ continuationAction, System::Threading::Tasks::TaskScheduler ^ scheduler);
public System.Threading.Tasks.Task ContinueWith (Action<System.Threading.Tasks.Task<TResult>> continuationAction, System.Threading.Tasks.TaskScheduler scheduler);
override this.ContinueWith : Action<System.Threading.Tasks.Task<'Result>> * System.Threading.Tasks.TaskScheduler -> System.Threading.Tasks.Task
Public Function ContinueWith (continuationAction As Action(Of Task(Of TResult)), scheduler As TaskScheduler) As Task

參數

continuationAction
Action<Task<TResult>>

Task<TResult> 完成時要執行的動作。An action to run when the Task<TResult> completes. 執行時,會將已完成的工作當做引數傳遞給委派。When run, the delegate will be passed the completed task as an argument.

scheduler
TaskScheduler

要與接續工作產生關聯且於執行時使用的 TaskSchedulerThe TaskScheduler to associate with the continuation task and to use for its execution.

傳回

新的接續 TaskA new continuation Task.

例外狀況

Task<TResult> 已經處置。The Task<TResult> has been disposed.

continuationAction 引數為 nullThe continuationAction argument is null.

-或--or- scheduler 引數為 nullThe scheduler argument is null.

備註

傳回Task的將不會排程執行, 直到目前的工作完成為止、它是否因為順利執行而完成、因未處理的例外狀況而發生錯誤, 或是因為取消而提前結束。The returned Task will not be scheduled for execution until the current task has completed, whether it completes due to running to completion successfully, faulting due to an unhandled exception, or exiting out early due to being canceled.

另請參閱

ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler)

建立目標 Task<TResult> 完成時執行的接續工作。Creates a continuation that executes when the target Task<TResult> completes.

public:
generic <typename TNewResult>
 System::Threading::Tasks::Task<TNewResult> ^ ContinueWith(Func<System::Threading::Tasks::Task<TResult> ^, System::Object ^, TNewResult> ^ continuationFunction, System::Object ^ state, System::Threading::CancellationToken cancellationToken, System::Threading::Tasks::TaskContinuationOptions continuationOptions, System::Threading::Tasks::TaskScheduler ^ scheduler);
public System.Threading.Tasks.Task<TNewResult> ContinueWith<TNewResult> (Func<System.Threading.Tasks.Task<TResult>,object,TNewResult> continuationFunction, object state, System.Threading.CancellationToken cancellationToken, System.Threading.Tasks.TaskContinuationOptions continuationOptions, System.Threading.Tasks.TaskScheduler scheduler);
override this.ContinueWith : Func<System.Threading.Tasks.Task<'Result>, obj, 'NewResult> * obj * System.Threading.CancellationToken * System.Threading.Tasks.TaskContinuationOptions * System.Threading.Tasks.TaskScheduler -> System.Threading.Tasks.Task<'NewResult>

類型參數

TNewResult

接續作業所產生的結果類型。The type of the result produced by the continuation.

參數

continuationFunction
Func<Task<TResult>,Object,TNewResult>

Task<TResult> 完成時要執行的函式。A function to run when the Task<TResult> completes. 當執行時,完成的工作會傳遞至委派,並以呼叫端提供狀態的物件做為引數。When run, the delegate will be passed the completed task and the caller-supplied state object as arguments.

state
Object

物件,表示接續函式所使用的資料。An object representing data to be used by the continuation function.

cancellationToken
CancellationToken

要指派給新工作的 CancellationTokenThe CancellationToken that will be assigned to the new task.

continuationOptions
TaskContinuationOptions

接續工作的排程時間及其行為方式的適用選項。Options for when the continuation is scheduled and how it behaves. 這包含準則 (如 OnlyOnCanceled) 和執行選項 (如 ExecuteSynchronously)。This includes criteria, such as OnlyOnCanceled, as well as execution options, such as ExecuteSynchronously.

scheduler
TaskScheduler

要與接續工作產生關聯且於執行時使用的 TaskSchedulerThe TaskScheduler to associate with the continuation task and to use for its execution.

傳回

Task<TNewResult>

新的接續 Task<TResult>A new continuation Task<TResult>.

例外狀況

scheduler 引數為 nullThe scheduler argument is null.

continuationOptions 引數指定了無效的 TaskContinuationOptions 值。The continuationOptions argument specifies an invalid value for TaskContinuationOptions.

已經處置所提供的 CancellationTokenThe provided CancellationToken has already been disposed.

備註

傳回Task<TResult>的將不會排程執行, 直到目前的工作完成為止、它是否因為順利執行而完成、因未處理的例外狀況而發生錯誤, 或是因為取消而提前結束。The returned Task<TResult> will not be scheduled for execution until the current task has completed, whether it completes due to running to completion successfully, faulting due to an unhandled exception, or exiting out early due to being canceled.

執行時, 應該會Task<TResult>傳回。 continuationFunctionThe continuationFunction, when executed, should return a Task<TResult>. 這項工作Task<TResult>.ContinueWith的完成狀態將會傳輸至呼叫所傳回的工作。This task's completion state will be transferred to the task returned from the Task<TResult>.ContinueWith call.

另請參閱

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

建立會根據 continuationOptions 中指定的條件執行的接續。Creates a continuation that executes according the condition specified in continuationOptions.

public:
generic <typename TNewResult>
 System::Threading::Tasks::Task<TNewResult> ^ ContinueWith(Func<System::Threading::Tasks::Task<TResult> ^, TNewResult> ^ continuationFunction, System::Threading::CancellationToken cancellationToken, System::Threading::Tasks::TaskContinuationOptions continuationOptions, System::Threading::Tasks::TaskScheduler ^ scheduler);
public System.Threading.Tasks.Task<TNewResult> ContinueWith<TNewResult> (Func<System.Threading.Tasks.Task<TResult>,TNewResult> continuationFunction, System.Threading.CancellationToken cancellationToken, System.Threading.Tasks.TaskContinuationOptions continuationOptions, System.Threading.Tasks.TaskScheduler scheduler);
override this.ContinueWith : Func<System.Threading.Tasks.Task<'Result>, 'NewResult> * System.Threading.CancellationToken * System.Threading.Tasks.TaskContinuationOptions * System.Threading.Tasks.TaskScheduler -> System.Threading.Tasks.Task<'NewResult>

類型參數

TNewResult

接續作業所產生的結果類型。The type of the result produced by the continuation.

參數

continuationFunction
Func<Task<TResult>,TNewResult>

要根據 continuationOptions 中指定之條件執行的函式。A function to run according the condition specified in continuationOptions.

執行時,會將這個完成的工作當做引數傳遞給委派。When run, the delegate will be passed as an argument this completed task.

cancellationToken
CancellationToken

要指派給新工作的 CancellationTokenThe CancellationToken that will be assigned to the new task.

continuationOptions
TaskContinuationOptions

接續工作的排程時間及其行為方式的適用選項。Options for when the continuation is scheduled and how it behaves. 這包含準則 (如 OnlyOnCanceled) 和執行選項 (如 ExecuteSynchronously)。This includes criteria, such as OnlyOnCanceled, as well as execution options, such as ExecuteSynchronously.

scheduler
TaskScheduler

要與接續工作產生關聯且於執行時使用的 TaskSchedulerThe TaskScheduler to associate with the continuation task and to use for its execution.

傳回

Task<TNewResult>

新的接續 Task<TResult>A new continuation Task<TResult>.

例外狀況

Task<TResult> 已經處置。The Task<TResult> has been disposed.

-或--or- 已處置建立 cancellationTokenCancellationTokenSourceThe CancellationTokenSource that created cancellationToken has already been disposed.

continuationFunction 引數為 nullThe continuationFunction argument is null.

-或--or- scheduler 引數為 nullThe scheduler argument is null.

continuationOptions 引數指定的 TaskContinuationOptions 值不正確。The continuationOptions argument specifies an invalid value for TaskContinuationOptions.

備註

傳回Task<TResult>的將不會排程執行, 直到目前的工作完成為止、它是否因為順利執行而完成、因未處理的例外狀況而發生錯誤, 或是因為取消而提前結束。The returned Task<TResult> will not be scheduled for execution until the current task has completed, whether it completes due to running to completion successfully, faulting due to an unhandled exception, or exiting out early due to being canceled.

執行時, 應該會Task<TResult>傳回。 continuationFunctionThe continuationFunction, when executed, should return a Task<TResult>.

另請參閱

ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, TaskScheduler)

建立目標 Task<TResult> 完成時執行的接續工作。Creates a continuation that executes when the target Task<TResult> completes.

public:
generic <typename TNewResult>
 System::Threading::Tasks::Task<TNewResult> ^ ContinueWith(Func<System::Threading::Tasks::Task<TResult> ^, System::Object ^, TNewResult> ^ continuationFunction, System::Object ^ state, System::Threading::Tasks::TaskScheduler ^ scheduler);
public System.Threading.Tasks.Task<TNewResult> ContinueWith<TNewResult> (Func<System.Threading.Tasks.Task<TResult>,object,TNewResult> continuationFunction, object state, System.Threading.Tasks.TaskScheduler scheduler);
override this.ContinueWith : Func<System.Threading.Tasks.Task<'Result>, obj, 'NewResult> * obj * System.Threading.Tasks.TaskScheduler -> System.Threading.Tasks.Task<'NewResult>
Public Function ContinueWith(Of TNewResult) (continuationFunction As Func(Of Task(Of TResult), Object, TNewResult), state As Object, scheduler As TaskScheduler) As Task(Of TNewResult)

類型參數

TNewResult

接續作業所產生的結果類型。The type of the result produced by the continuation.

參數

continuationFunction
Func<Task<TResult>,Object,TNewResult>

Task<TResult> 完成時要執行的函式。A function to run when the Task<TResult> completes. 當執行時,完成的工作會傳遞至委派,並以呼叫端提供狀態的物件做為引數。When run, the delegate will be passed the completed task and the caller-supplied state object as arguments.

state
Object

物件,表示接續函式所使用的資料。An object representing data to be used by the continuation function.

scheduler
TaskScheduler

要與接續工作產生關聯且於執行時使用的 TaskSchedulerThe TaskScheduler to associate with the continuation task and to use for its execution.

傳回

Task<TNewResult>

新的接續 Task<TResult>A new continuation Task<TResult>.

例外狀況

scheduler 引數為 nullThe scheduler argument is null.

備註

傳回Task<TResult>的將不會排程執行, 直到目前的工作完成為止、它是否因為順利執行而完成、因未處理的例外狀況而發生錯誤, 或是因為取消而提前結束。The returned Task<TResult> will not be scheduled for execution until the current task has completed, whether it completes due to running to completion successfully, faulting due to an unhandled exception, or exiting out early due to being canceled.

另請參閱

ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, TaskContinuationOptions)

建立目標 Task<TResult> 完成時執行的接續工作。Creates a continuation that executes when the target Task<TResult> completes.

public:
generic <typename TNewResult>
 System::Threading::Tasks::Task<TNewResult> ^ ContinueWith(Func<System::Threading::Tasks::Task<TResult> ^, System::Object ^, TNewResult> ^ continuationFunction, System::Object ^ state, System::Threading::Tasks::TaskContinuationOptions continuationOptions);
public System.Threading.Tasks.Task<TNewResult> ContinueWith<TNewResult> (Func<System.Threading.Tasks.Task<TResult>,object,TNewResult> continuationFunction, object state, System.Threading.Tasks.TaskContinuationOptions continuationOptions);
override this.ContinueWith : Func<System.Threading.Tasks.Task<'Result>, obj, 'NewResult> * obj * System.Threading.Tasks.TaskContinuationOptions -> System.Threading.Tasks.Task<'NewResult>
Public Function ContinueWith(Of TNewResult) (continuationFunction As Func(Of Task(Of TResult), Object, TNewResult), state As Object, continuationOptions As TaskContinuationOptions) As Task(Of TNewResult)

類型參數

TNewResult

接續作業所產生的結果類型。The type of the result produced by the continuation.

參數

continuationFunction
Func<Task<TResult>,Object,TNewResult>

Task<TResult> 完成時要執行的函式。A function to run when the Task<TResult> completes. 當執行時,完成的工作會傳遞至委派,並以呼叫端提供狀態的物件做為引數。When run, the delegate will be passed the completed task and the caller-supplied state object as arguments.

state
Object

物件,表示接續函式所使用的資料。An object representing data to be used by the continuation function.

continuationOptions
TaskContinuationOptions

接續工作的排程時間及其行為方式的適用選項。Options for when the continuation is scheduled and how it behaves. 這包含準則 (如 OnlyOnCanceled) 和執行選項 (如 ExecuteSynchronously)。This includes criteria, such as OnlyOnCanceled, as well as execution options, such as ExecuteSynchronously.

傳回

Task<TNewResult>

新的接續 Task<TResult>A new continuation Task<TResult>.

例外狀況

continuationFunction 引數為 nullThe continuationFunction argument is null.

continuationOptions 引數指定的 TaskContinuationOptions 值不正確。The continuationOptions argument specifies an invalid value for TaskContinuationOptions.

備註

傳回Task<TResult>的將不會排程執行, 直到目前的工作完成為止、它是否因為順利執行而完成、因未處理的例外狀況而發生錯誤, 或是因為取消而提前結束。The returned Task<TResult> will not be scheduled for execution until the current task has completed, whether it completes due to running to completion successfully, faulting due to an unhandled exception, or exiting out early due to being canceled.

執行時, 應該會Task<TResult>傳回。 continuationFunctionThe continuationFunction, when executed, should return a Task<TResult>. 這項工作的完成狀態將會傳送至 System.threading.tasks.task.continuewith 呼叫所傳回的工作。This task's completion state will be transferred to the task returned from the ContinueWith call.

另請參閱

ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, CancellationToken)

建立目標 Task<TResult> 完成時執行的接續工作。Creates a continuation that executes when the target Task<TResult> completes.

public:
generic <typename TNewResult>
 System::Threading::Tasks::Task<TNewResult> ^ ContinueWith(Func<System::Threading::Tasks::Task<TResult> ^, System::Object ^, TNewResult> ^ continuationFunction, System::Object ^ state, System::Threading::CancellationToken cancellationToken);
public System.Threading.Tasks.Task<TNewResult> ContinueWith<TNewResult> (Func<System.Threading.Tasks.Task<TResult>,object,TNewResult> continuationFunction, object state, System.Threading.CancellationToken cancellationToken);
override this.ContinueWith : Func<System.Threading.Tasks.Task<'Result>, obj, 'NewResult> * obj * System.Threading.CancellationToken -> System.Threading.Tasks.Task<'NewResult>

類型參數

TNewResult

接續作業所產生的結果類型。The type of the result produced by the continuation.

參數

continuationFunction
Func<Task<TResult>,Object,TNewResult>

Task<TResult> 完成時要執行的函式。A function to run when the Task<TResult> completes. 當執行時,完成的工作會傳遞至委派,並以呼叫端提供狀態的物件做為引數。When run, the delegate will be passed the completed task and the caller-supplied state object as arguments.

state
Object

物件,表示接續函式所使用的資料。An object representing data to be used by the continuation function.

cancellationToken
CancellationToken

要指派給新工作的 CancellationTokenThe CancellationToken that will be assigned to the new task.

傳回

Task<TNewResult>

新的接續 Task<TResult>A new continuation Task<TResult>.

例外狀況

continuationFunction 引數為 nullThe continuationFunction argument is null.

已經處置所提供的 CancellationTokenThe provided CancellationToken has already been disposed.

備註

傳回Task<TResult>的將不會排程執行, 直到目前的工作完成為止、它是否因為順利執行而完成、因未處理的例外狀況而發生錯誤, 或是因為取消而提前結束。The returned Task<TResult> will not be scheduled for execution until the current task has completed, whether it completes due to running to completion successfully, faulting due to an unhandled exception, or exiting out early due to being canceled.

另請參閱

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, TaskContinuationOptions)

建立會根據 continuationOptions 中指定的條件執行的接續。Creates a continuation that executes according the condition specified in continuationOptions.

public:
generic <typename TNewResult>
 System::Threading::Tasks::Task<TNewResult> ^ ContinueWith(Func<System::Threading::Tasks::Task<TResult> ^, TNewResult> ^ continuationFunction, System::Threading::Tasks::TaskContinuationOptions continuationOptions);
public System.Threading.Tasks.Task<TNewResult> ContinueWith<TNewResult> (Func<System.Threading.Tasks.Task<TResult>,TNewResult> continuationFunction, System.Threading.Tasks.TaskContinuationOptions continuationOptions);
override this.ContinueWith : Func<System.Threading.Tasks.Task<'Result>, 'NewResult> * System.Threading.Tasks.TaskContinuationOptions -> System.Threading.Tasks.Task<'NewResult>
Public Function ContinueWith(Of TNewResult) (continuationFunction As Func(Of Task(Of TResult), TNewResult), continuationOptions As TaskContinuationOptions) As Task(Of TNewResult)

類型參數

TNewResult

接續作業所產生的結果類型。The type of the result produced by the continuation.

參數

continuationFunction
Func<Task<TResult>,TNewResult>

要根據 continuationOptions 中指定之條件執行的函式。A function to run according the condition specified in continuationOptions.

執行時,會將已完成的工作當做引數傳遞給委派。When run, the delegate will be passed the completed task as an argument.

continuationOptions
TaskContinuationOptions

接續工作的排程時間及其行為方式的適用選項。Options for when the continuation is scheduled and how it behaves. 這包含準則 (如 OnlyOnCanceled) 和執行選項 (如 ExecuteSynchronously)。This includes criteria, such as OnlyOnCanceled, as well as execution options, such as ExecuteSynchronously.

傳回

Task<TNewResult>

新的接續 Task<TResult>A new continuation Task<TResult>.

例外狀況

Task<TResult> 已經處置。The Task<TResult> has been disposed.

continuationFunction 引數為 nullThe continuationFunction argument is null.

continuationOptions 引數指定的 TaskContinuationOptions 值不正確。The continuationOptions argument specifies an invalid value for TaskContinuationOptions.

備註

傳回Task<TResult>的將不會排程執行, 直到目前的工作完成為止、它是否因為順利執行而完成、因未處理的例外狀況而發生錯誤, 或是因為取消而提前結束。The returned Task<TResult> will not be scheduled for execution until the current task has completed, whether it completes due to running to completion successfully, faulting due to an unhandled exception, or exiting out early due to being canceled.

執行時, 應該會Task<TResult>傳回。 continuationFunctionThe continuationFunction, when executed, should return a Task<TResult>.

另請參閱

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, CancellationToken)

建立當目標 Task<TResult> 完成時非同步執行的接續。Creates a continuation that executes asynchronously when the target Task<TResult> completes.

public:
generic <typename TNewResult>
 System::Threading::Tasks::Task<TNewResult> ^ ContinueWith(Func<System::Threading::Tasks::Task<TResult> ^, TNewResult> ^ continuationFunction, System::Threading::CancellationToken cancellationToken);
public System.Threading.Tasks.Task<TNewResult> ContinueWith<TNewResult> (Func<System.Threading.Tasks.Task<TResult>,TNewResult> continuationFunction, System.Threading.CancellationToken cancellationToken);
override this.ContinueWith : Func<System.Threading.Tasks.Task<'Result>, 'NewResult> * System.Threading.CancellationToken -> System.Threading.Tasks.Task<'NewResult>

類型參數

TNewResult

接續作業所產生的結果類型。The type of the result produced by the continuation.

參數

continuationFunction
Func<Task<TResult>,TNewResult>

Task<TResult> 完成時要執行的函式。A function to run when the Task<TResult> completes. 執行時,會將已完成的工作當做引數傳遞給委派。When run, the delegate will be passed the completed task as an argument.

cancellationToken
CancellationToken

要指派給新工作的 CancellationTokenThe CancellationToken that will be assigned to the new task.

傳回

Task<TNewResult>

新的接續 Task<TResult>A new continuation Task<TResult>.

例外狀況

Task<TResult> 已經處置。The Task<TResult> has been disposed.

-或--or- 已處置建立 cancellationTokenCancellationTokenSourceThe CancellationTokenSource that created cancellationToken has already been disposed.

continuationFunction 引數為 nullThe continuationFunction argument is null.

備註

傳回Task<TResult>的將不會排程執行, 直到目前的工作完成為止、它是否因為順利執行而完成、因未處理的例外狀況而發生錯誤, 或是因為取消而提前結束。The returned Task<TResult> will not be scheduled for execution until the current task has completed, whether it completes due to running to completion successfully, faulting due to an unhandled exception, or exiting out early due to being canceled.

另請參閱

ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object)

建立目標 Task<TResult> 完成時執行的接續工作。Creates a continuation that executes when the target Task<TResult> completes.

public:
generic <typename TNewResult>
 System::Threading::Tasks::Task<TNewResult> ^ ContinueWith(Func<System::Threading::Tasks::Task<TResult> ^, System::Object ^, TNewResult> ^ continuationFunction, System::Object ^ state);
public System.Threading.Tasks.Task<TNewResult> ContinueWith<TNewResult> (Func<System.Threading.Tasks.Task<TResult>,object,TNewResult> continuationFunction, object state);
override this.ContinueWith : Func<System.Threading.Tasks.Task<'Result>, obj, 'NewResult> * obj -> System.Threading.Tasks.Task<'NewResult>
Public Function ContinueWith(Of TNewResult) (continuationFunction As Func(Of Task(Of TResult), Object, TNewResult), state As Object) As Task(Of TNewResult)

類型參數

TNewResult

接續作業所產生的結果類型。The type of the result produced by the continuation.

參數

continuationFunction
Func<Task<TResult>,Object,TNewResult>

Task<TResult> 完成時要執行的函式。A function to run when the Task<TResult> completes. 當執行時,完成的工作會傳遞至委派,並以呼叫端提供狀態的物件做為引數。When run, the delegate will be passed the completed task and the caller-supplied state object as arguments.

state
Object

物件,表示接續函式所使用的資料。An object representing data to be used by the continuation function.

傳回

Task<TNewResult>

新的接續 Task<TResult>A new continuation Task<TResult>.

例外狀況

continuationFunction 引數為 nullThe continuationFunction argument is null.

範例

下列範例會建立一個接續工作鏈。The following example creates a chain of continuation tasks. 每個工作會為DateTime ContinueWith(Action<Task,Object>, Object)方法的狀態引數提供目前的時間 (物件)。Each task provides the current time, a DateTime object, for the state argument of the ContinueWith(Action<Task,Object>, Object) method. DateTime個值都代表建立繼續工作的時間。Each DateTime value represents the time at which the continue task is created. 每個工作都會產生做為其DateTime結果的第二個值, 表示工作完成的時間。Each task produces as its result a second DateTime value that represents the time at which the task finishes. 完成所有工作之後, 此範例會顯示每個接續工作開始和完成的日期和時間。After all tasks finish, the example displays the date and times at which each continuation task starts and finishes.

using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

// Demonstrates how to associate state with task continuations.
class ContinuationState
{
   // Simluates a lengthy operation and returns the time at which
   // the operation completed.
   public static DateTime DoWork()
   {
      // Simulate work by suspending the current thread 
      // for two seconds.
      Thread.Sleep(2000);

      // Return the current time.
      return DateTime.Now;
   }

   static void Main(string[] args)
   {
      // Start a root task that performs work.
      Task<DateTime> t = Task<DateTime>.Run(delegate { return DoWork(); });

      // Create a chain of continuation tasks, where each task is 
      // followed by another task that performs work.
      List<Task<DateTime>> continuations = new List<Task<DateTime>>();
      for (int i = 0; i < 5; i++)
      {
         // Provide the current time as the state of the continuation.
         t = t.ContinueWith(delegate { return DoWork(); }, DateTime.Now);
         continuations.Add(t);
      }

      // Wait for the last task in the chain to complete.
      t.Wait();

      // Print the creation time of each continuation (the state object)
      // and the completion time (the result of that task) to the console.
      foreach (var continuation in continuations)
      {
         DateTime start = (DateTime)continuation.AsyncState;
         DateTime end = continuation.Result;

         Console.WriteLine("Task was created at {0} and finished at {1}.",
            start.TimeOfDay, end.TimeOfDay);
      }
   }
}

/* Sample output:
Task was created at 10:56:21.1561762 and finished at 10:56:25.1672062.
Task was created at 10:56:21.1610677 and finished at 10:56:27.1707646.
Task was created at 10:56:21.1610677 and finished at 10:56:29.1743230.
Task was created at 10:56:21.1610677 and finished at 10:56:31.1779883.
Task was created at 10:56:21.1610677 and finished at 10:56:33.1837083.
*/
Imports System.Collections.Generic
Imports System.Threading
Imports System.Threading.Tasks

' Demonstrates how to associate state with task continuations.
Public Module ContinuationState
   ' Simluates a lengthy operation and returns the time at which
   ' the operation completed.
   Public Function DoWork() As Date
      ' Simulate work by suspending the current thread 
      ' for two seconds.
      Thread.Sleep(2000)

      ' Return the current time.
      Return Date.Now
   End Function

   Public Sub Main()
      ' Start a root task that performs work.
      Dim t As Task(Of Date) = Task(Of Date).Run(Function() DoWork())

      ' Create a chain of continuation tasks, where each task is
      ' followed by another task that performs work.
      Dim continuations As New List(Of Task(Of DateTime))()
      For i As Integer = 0 To 4
         ' Provide the current time as the state of the continuation.
         t = t.ContinueWith(Function(antecedent, state) DoWork(), DateTime.Now)
         continuations.Add(t)
      Next

      ' Wait for the last task in the chain to complete.
      t.Wait()

      ' Display the creation time of each continuation (the state object)
      ' and the completion time (the result of that task) to the console.
      For Each continuation In continuations
         Dim start As DateTime = CDate(continuation.AsyncState)
         Dim [end] As DateTime = continuation.Result

         Console.WriteLine("Task was created at {0} and finished at {1}.",
            start.TimeOfDay, [end].TimeOfDay)
      Next
   End Sub
End Module
' The example displays output like the following:
'       Task was created at 10:56:21.1561762 and finished at 10:56:25.1672062.
'       Task was created at 10:56:21.1610677 and finished at 10:56:27.1707646.
'       Task was created at 10:56:21.1610677 and finished at 10:56:29.1743230.
'       Task was created at 10:56:21.1610677 and finished at 10:56:31.1779883.
'       Task was created at 10:56:21.1610677 and finished at 10:56:33.1837083.

備註

傳回Task<TResult>的將不會排程執行, 直到目前的工作完成為止、它是否因為順利執行而完成、因未處理的例外狀況而發生錯誤, 或是因為取消而提前結束。The returned Task<TResult> will not be scheduled for execution until the current task has completed, whether it completes due to running to completion successfully, faulting due to an unhandled exception, or exiting out early due to being canceled.

另請參閱

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>)

建立當目標 Task<TResult> 完成時非同步執行的接續。Creates a continuation that executes asynchronously when the target Task<TResult> completes.

public:
generic <typename TNewResult>
 System::Threading::Tasks::Task<TNewResult> ^ ContinueWith(Func<System::Threading::Tasks::Task<TResult> ^, TNewResult> ^ continuationFunction);
public System.Threading.Tasks.Task<TNewResult> ContinueWith<TNewResult> (Func<System.Threading.Tasks.Task<TResult>,TNewResult> continuationFunction);
override this.ContinueWith : Func<System.Threading.Tasks.Task<'Result>, 'NewResult> -> System.Threading.Tasks.Task<'NewResult>
Public Function ContinueWith(Of TNewResult) (continuationFunction As Func(Of Task(Of TResult), TNewResult)) As Task(Of TNewResult)

類型參數

TNewResult

接續作業所產生的結果類型。The type of the result produced by the continuation.

參數

continuationFunction
Func<Task<TResult>,TNewResult>

Task<TResult> 完成時要執行的函式。A function to run when the Task<TResult> completes. 執行時,會將已完成的工作當做引數傳遞給委派。When run, the delegate will be passed the completed task as an argument.

傳回

Task<TNewResult>

新的接續 Task<TResult>A new continuation Task<TResult>.

例外狀況

Task<TResult> 已經處置。The Task<TResult> has been disposed.

continuationFunction 引數為 nullThe continuationFunction argument is null.

備註

傳回Task<TResult>的將不會排程執行, 直到目前的工作完成為止、它是否因為順利執行而完成、因未處理的例外狀況而發生錯誤, 或是因為取消而提前結束。The returned Task<TResult> will not be scheduled for execution until the current task has completed, whether it completes due to running to completion successfully, faulting due to an unhandled exception, or exiting out early due to being canceled.

另請參閱

ContinueWith<TNewResult>(Func<Task<TResult>,TNewResult>, TaskScheduler)

建立當目標 Task<TResult> 完成時非同步執行的接續。Creates a continuation that executes asynchronously when the target Task<TResult> completes.

public:
generic <typename TNewResult>
 System::Threading::Tasks::Task<TNewResult> ^ ContinueWith(Func<System::Threading::Tasks::Task<TResult> ^, TNewResult> ^ continuationFunction, System::Threading::Tasks::TaskScheduler ^ scheduler);
public System.Threading.Tasks.Task<TNewResult> ContinueWith<TNewResult> (Func<System.Threading.Tasks.Task<TResult>,TNewResult> continuationFunction, System.Threading.Tasks.TaskScheduler scheduler);
override this.ContinueWith : Func<System.Threading.Tasks.Task<'Result>, 'NewResult> * System.Threading.Tasks.TaskScheduler -> System.Threading.Tasks.Task<'NewResult>
Public Function ContinueWith(Of TNewResult) (continuationFunction As Func(Of Task(Of TResult), TNewResult), scheduler As TaskScheduler) As Task(Of TNewResult)

類型參數

TNewResult

接續作業所產生的結果類型。The type of the result produced by the continuation.

參數

continuationFunction
Func<Task<TResult>,TNewResult>

Task<TResult> 完成時要執行的函式。A function to run when the Task<TResult> completes. 執行時,會將已完成的工作當做引數傳遞給委派。When run, the delegate will be passed the completed task as an argument.

scheduler
TaskScheduler

要與接續工作產生關聯且於執行時使用的 TaskSchedulerThe TaskScheduler to associate with the continuation task and to use for its execution.

傳回

Task<TNewResult>

新的接續 Task<TResult>A new continuation Task<TResult>.

例外狀況

Task<TResult> 已經處置。The Task<TResult> has been disposed.

continuationFunction 引數為 nullThe continuationFunction argument is null.

-或--or- scheduler 引數為 nullThe scheduler argument is null.

備註

傳回Task<TResult>的將不會排程執行, 直到目前的工作完成為止、它是否因為順利執行而完成、因未處理的例外狀況而發生錯誤, 或是因為取消而提前結束。The returned Task<TResult> will not be scheduled for execution until the current task has completed, whether it completes due to running to completion successfully, faulting due to an unhandled exception, or exiting out early due to being canceled.

另請參閱

適用於