Task<TResult>.ContinueWith 方法

定義

建立一個續寫任務,當另一個任務完成時執行。

多載

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

建立一個續接,當目標 Task<TResult> 完成時執行。

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

建立一個續接,當目標 Task<TResult> 完成時執行。

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

建立一個續接,當目標 Task<TResult> 完成時執行。

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

建立一個續接,當目標 Task<TResult> 完成時執行。

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

建立一個延續,依照 中 continuationOptions指定的條件執行。

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

建立一個延續,依照 中 continuationOptions指定的條件執行。

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

建立一個可取消的續行,當目標 Task<TResult> 完成時會非同步執行。

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

建立一個延續,傳遞狀態資訊,並在目標 Task<TResult> 完成時執行。

ContinueWith(Action<Task<TResult>>)

建立當目標工作完成時,以異步方式執行的接續。

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

建立一個續接,當目標 Task<TResult> 完成時會非同步執行。

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

建立一個續接,當目標 Task<TResult> 完成時執行。

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

建立一個延續,依照 中 continuationOptions指定的條件執行。

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

建立一個續接,當目標 Task<TResult> 完成時執行。

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

建立一個續接,當目標 Task<TResult> 完成時執行。

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

建立一個續接,當目標 Task<TResult> 完成時執行。

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

建立一個延續,依照 中 continuationOptions指定的條件執行。

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

建立一個續接,當目標 Task<TResult> 完成時會非同步執行。

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

建立一個續接,當目標 Task<TResult> 完成時執行。

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

建立一個續接,當目標 Task<TResult> 完成時會非同步執行。

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

建立一個續接,當目標 Task<TResult> 完成時會非同步執行。

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

來源:
Future.cs
來源:
Task_T.cs
來源:
Future.cs
來源:
Future.cs
來源:
Future.cs

建立一個續接,當目標 Task<TResult> 完成時執行。

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);
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
Public Function ContinueWith (continuationAction As Action(Of Task(Of TResult), Object), state As Object, cancellationToken As CancellationToken, continuationOptions As TaskContinuationOptions, scheduler As TaskScheduler) As Task

參數

continuationAction
Action<Task<TResult>,Object>

完成後 Task<TResult> 執行的動作。 執行時,代理會被傳遞已完成的任務以及呼叫者提供的狀態物件作為參數。

state
Object

一個代表持續動作要使用的資料的物件。

cancellationToken
CancellationToken

CancellationToken 個會被分配到新的續作任務。

continuationOptions
TaskContinuationOptions

關於續作何時安排以及它的行為方式的選項。 這包括條件,如 OnlyOnCanceled,以及執行選項,如 ExecuteSynchronously

scheduler
TaskScheduler

TaskScheduler 續接任務關聯並用於執行。

傳回

一個新的續集 Task

例外狀況

scheduler 點為 null

continuationOptions參數指定了一個無效的值。TaskContinuationOptions

所提供的 CancellationToken 已經被處理掉。

備註

退回 Task 的任務在當前任務完成前不會排程執行。 若未符合參數所指定的 continuationOptions 條件,續接任務將被取消而非排程。

另請參閱

適用於

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

來源:
Future.cs
來源:
Task_T.cs
來源:
Future.cs
來源:
Future.cs
來源:
Future.cs

建立一個續接,當目標 Task<TResult> 完成時執行。

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);
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> 執行的動作。 執行時,代理會被傳遞已完成的任務以及呼叫者提供的狀態物件作為參數。

state
Object

一個代表持續動作要使用的資料的物件。

scheduler
TaskScheduler

TaskScheduler 續接任務關聯並用於執行。

傳回

一個新的續集 Task

例外狀況

scheduler 點為 null

備註

回傳 Task 的任務不會排程執行,直到目前任務完成,無論是因成功完成、因未處理異常而錯誤,或因被取消而提前退出。

另請參閱

適用於

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

來源:
Future.cs
來源:
Task_T.cs
來源:
Future.cs
來源:
Future.cs
來源:
Future.cs

建立一個續接,當目標 Task<TResult> 完成時執行。

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);
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> 執行的動作。 執行時,代理會被傳遞已完成的任務以及呼叫者提供的狀態物件作為參數。

state
Object

一個代表持續動作要使用的資料的物件。

continuationOptions
TaskContinuationOptions

關於續作何時安排以及它的行為方式的選項。 這包括條件,如 OnlyOnCanceled,以及執行選項,如 ExecuteSynchronously

傳回

一個新的續集 Task

例外狀況

continuationAction 點為 null

continuationOptions參數指定了一個無效的值。TaskContinuationOptions

備註

退回 Task 的任務在當前任務完成前不會排程執行。 若未符合參數中指定的 continuationOptions 續航標準,續航任務將被取消而非排程。

另請參閱

適用於

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

來源:
Future.cs
來源:
Task_T.cs
來源:
Future.cs
來源:
Future.cs
來源:
Future.cs

建立一個續接,當目標 Task<TResult> 完成時執行。

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);
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
Public Function ContinueWith (continuationAction As Action(Of Task(Of TResult), Object), state As Object, cancellationToken As CancellationToken) As Task

參數

continuationAction
Action<Task<TResult>,Object>

完成後 Task<TResult> 執行的動作。 執行時,代理會被傳遞已完成的任務以及呼叫者提供的狀態物件作為參數。

state
Object

一個代表持續動作要使用的資料的物件。

cancellationToken
CancellationToken

CancellationToken 個會被分配到新的續作任務。

傳回

一個新的續集 Task

例外狀況

continuationAction 點為 null

所提供的 CancellationToken 已經被處理掉。

備註

回傳 Task 的任務不會排程執行,直到目前任務完成,無論是因成功完成、因未處理異常而錯誤,或因被取消而提前退出。

另請參閱

適用於

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

來源:
Future.cs
來源:
Task_T.cs
來源:
Future.cs
來源:
Future.cs
來源:
Future.cs

建立一個延續,依照 中 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
Public Function ContinueWith (continuationAction As Action(Of Task(Of TResult)), cancellationToken As CancellationToken, continuationOptions As TaskContinuationOptions, scheduler As TaskScheduler) As Task

參數

continuationAction
Action<Task<TResult>>

一個根據 中 continuationOptions指定的條件執行的動作。 執行時,代表會收到已完成的任務作為參數。

cancellationToken
CancellationToken

CancellationToken 個會被分配到新的續作任務。

continuationOptions
TaskContinuationOptions

關於續作何時安排以及它的行為方式的選項。 這包括條件,如 OnlyOnCanceled,以及執行選項,如 ExecuteSynchronously

scheduler
TaskScheduler

TaskScheduler 續接任務關聯並用於執行。

傳回

一個新的續集 Task

例外狀況

這些 Task<TResult> 已經被處理掉了。

-或-

CancellationTokenSource那個已經被cancellationToken處理掉的。

continuationAction 點為 null

-或-

scheduler 點為 null

continuationOptions參數指定了一個無效的值。TaskContinuationOptions

備註

退回 Task 的任務在當前任務完成前不會排程執行。 若未符合參數所指定的 continuationOptions 條件,續接任務將被取消而非排程。 如需詳細資訊,請參閱使用接續工作鏈結任務

另請參閱

適用於

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

來源:
Future.cs
來源:
Task_T.cs
來源:
Future.cs
來源:
Future.cs
來源:
Future.cs

建立一個延續,依照 中 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所規定條件 的動作。 執行時,代表會收到已完成的任務作為參數。

continuationOptions
TaskContinuationOptions

關於續作何時安排以及它的行為方式的選項。 這包括條件,如 OnlyOnCanceled,以及執行選項,如 ExecuteSynchronously

傳回

一個新的續集 Task

例外狀況

這些 Task<TResult> 已經被處理掉了。

continuationAction 點為 null

continuationOptions參數指定了一個無效的值。TaskContinuationOptions

備註

退回 Task 的任務在當前任務完成前不會排程執行。 若未符合參數中指定的 continuationOptions 續航標準,續航任務將被取消而非排程。

如需詳細資訊,請參閱使用接續工作鏈結任務

另請參閱

適用於

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

來源:
Future.cs
來源:
Task_T.cs
來源:
Future.cs
來源:
Future.cs
來源:
Future.cs

建立一個可取消的續行,當目標 Task<TResult> 完成時會非同步執行。

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
Public Function ContinueWith (continuationAction As Action(Of Task(Of TResult)), cancellationToken As CancellationToken) As Task

參數

continuationAction
Action<Task<TResult>>

完成後 Task<TResult> 執行的動作。 執行時,代表會以參數形式接收已完成的任務。

cancellationToken
CancellationToken

傳遞給新續作業的取消標記。

傳回

一個新的續作任務。

例外狀況

這些 Task<TResult> 已經被處理掉了。

-或-

CancellationTokenSource已完成cancellationToken的已處理。

continuationAction 點為 null

範例

以下範例建立一個前置任務,利用埃拉托斯特尼篩法計算介於1與使用者輸入值之間的質數。 陣列用於儲存質數的資訊。 陣列索引代表該數字,而該元素的值則表示該數字是合成數(其值為 true)還是質數(其值為 false)。 接著,這個任務會傳給一個續寫任務,後者負責從整數陣列中提取質數並顯示出來。

一個消去標記會同時傳遞給前件任務和續件任務。 System.Timers.Timer物件用來定義 100 毫秒的逾時值。 如果事件觸發,會呼叫該 CancellationTokenSource.Cancel 方法,並使用取消標記來請求任務的取消。

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] ) {
                                      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] )
                                                        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.

通常,提供約 100,000 的值會導致逾時區間結束並 Timer.Elapsed 觸發事件,並設定取消請求。

備註

回傳 Task 的任務不會排程執行,直到目前任務完成,無論是因成功完成、因未處理異常而錯誤,或因被取消而提前退出。

另請參閱

適用於

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

來源:
Future.cs
來源:
Task_T.cs
來源:
Future.cs
來源:
Future.cs
來源:
Future.cs

建立一個延續,傳遞狀態資訊,並在目標 Task<TResult> 完成時執行。

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);
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> 執行的動作。 執行時,代理會被傳遞已完成的任務以及呼叫者提供的狀態物件作為參數。

state
Object

一個代表持續動作要使用的資料的物件。

傳回

一個新的續集 Task

例外狀況

continuationAction 點為 null

範例

以下範例建立一個任務,傳遞介於 2 到 20 之間的整數,並回傳一個陣列,包含該數字的前十個指數(從 n1 到 n10)。 接著由延續任務負責顯示指數。 它同時傳遞前件與原數,而原數的指數由前件產生。

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 的任務不會排程執行,直到目前任務完成,無論是因成功完成、因未處理異常而錯誤,或因被取消而提前退出。

另請參閱

適用於

ContinueWith(Action<Task<TResult>>)

來源:
Future.cs
來源:
Task_T.cs
來源:
Future.cs
來源:
Future.cs
來源:
Future.cs

建立當目標工作完成時,以異步方式執行的接續。

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> 完成時執行的動作。 執行時,代表會收到已完成的任務作為參數。

傳回

一個新的續作任務。

例外狀況

這些 Task<TResult> 已經被處理掉了。

continuationAction 點為 null

範例

以下範例建立一個前置任務,利用埃拉托斯特尼篩法計算介於1與使用者輸入值之間的質數。 陣列用於儲存質數的資訊。 陣列索引代表該數字,而該元素的值則表示該數字是合成數(其值為 true)還是質數(其值為 false)。 接著,這個任務會傳給一個續寫任務,後者負責從整數陣列中提取質數並顯示出來。

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]) {
                                      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])
                                                        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 的任務在目前任務完成前不會排程執行,無論是因成功完成、因未處理異常而錯誤,或因被取消而提前退出。

另請參閱

適用於

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

來源:
Future.cs
來源:
Task_T.cs
來源:
Future.cs
來源:
Future.cs
來源:
Future.cs

建立一個續接,當目標 Task<TResult> 完成時會非同步執行。

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> 執行的動作。 執行時,代表會收到已完成的任務作為參數。

scheduler
TaskScheduler

TaskScheduler 續接任務關聯並用於執行。

傳回

一個新的續集 Task

例外狀況

這些 Task<TResult> 已經被處理掉了。

continuationAction 點為 null

-或-

scheduler 點為 null

備註

回傳 Task 的任務不會排程執行,直到目前任務完成,無論是因成功完成、因未處理異常而錯誤,或因被取消而提前退出。

另請參閱

適用於

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

來源:
Future.cs
來源:
Task_T.cs
來源:
Future.cs
來源:
Future.cs
來源:
Future.cs

建立一個續接,當目標 Task<TResult> 完成時執行。

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);
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>
Public Function ContinueWith(Of TNewResult) (continuationFunction As Func(Of Task(Of TResult), Object, TNewResult), state As Object, cancellationToken As CancellationToken, continuationOptions As TaskContinuationOptions, scheduler As TaskScheduler) As Task(Of TNewResult)

類型參數

TNewResult

續寫所產生的結果類型。

參數

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

一個在完成時 Task<TResult> 執行的函式。 執行時,代理會被傳遞已完成的任務以及呼叫者提供的狀態物件作為參數。

state
Object

一個代表由延續函數使用的資料的物件。

cancellationToken
CancellationToken

CancellationToken 個會被分配到新的任務上。

continuationOptions
TaskContinuationOptions

關於續作何時安排以及它的行為方式的選項。 這包括條件,如 OnlyOnCanceled,以及執行選項,如 ExecuteSynchronously

scheduler
TaskScheduler

TaskScheduler 續接任務關聯並用於執行。

傳回

Task<TNewResult>

一個新的續集 Task<TResult>

例外狀況

scheduler 點為 null

continuationOptions參數指定了一個無效的值。TaskContinuationOptions

所提供的 CancellationToken 已經被處理掉。

備註

回傳 Task<TResult> 的任務不會排程執行,直到目前任務完成,無論是因成功完成、因未處理異常而錯誤,或因被取消而提前退出。

執行時continuationFunction,應回傳 。Task<TResult> 此任務的完成狀態會轉移到呼叫回 Task<TResult>.ContinueWith 傳的任務上。

另請參閱

適用於

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

來源:
Future.cs
來源:
Task_T.cs
來源:
Future.cs
來源:
Future.cs
來源:
Future.cs

建立一個延續,依照 中 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>
Public Function ContinueWith(Of TNewResult) (continuationFunction As Func(Of Task(Of TResult), TNewResult), cancellationToken As CancellationToken, continuationOptions As TaskContinuationOptions, scheduler As TaskScheduler) As Task(Of TNewResult)

類型參數

TNewResult

續寫所產生的結果類型。

參數

continuationFunction
Func<Task<TResult>,TNewResult>

一個根據 中 continuationOptions指定的條件執行的函數。

執行後,代表將作為該任務完成的論點傳遞。

cancellationToken
CancellationToken

CancellationToken 個會被分配到新的任務上。

continuationOptions
TaskContinuationOptions

關於續作何時安排以及它的行為方式的選項。 這包括條件,如 OnlyOnCanceled,以及執行選項,如 ExecuteSynchronously

scheduler
TaskScheduler

TaskScheduler 續接任務關聯並用於執行。

傳回

Task<TNewResult>

一個新的續集 Task<TResult>

例外狀況

這些 Task<TResult> 已經被處理掉了。

-或-

CancellationTokenSource那個已經被cancellationToken處理掉的。

continuationFunction 點為 null

-或-

scheduler 點為 null

continuationOptions參數指定了一個無效的值。TaskContinuationOptions

備註

回傳 Task<TResult> 的任務不會排程執行,直到目前任務完成,無論是因成功完成、因未處理異常而錯誤,或因被取消而提前退出。

執行時continuationFunction,應回傳 。Task<TResult>

另請參閱

適用於

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

來源:
Future.cs
來源:
Task_T.cs
來源:
Future.cs
來源:
Future.cs
來源:
Future.cs

建立一個續接,當目標 Task<TResult> 完成時執行。

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);
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

續寫所產生的結果類型。

參數

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

一個在完成時 Task<TResult> 執行的函式。 執行時,代理會被傳遞已完成的任務以及呼叫者提供的狀態物件作為參數。

state
Object

一個代表由延續函數使用的資料的物件。

scheduler
TaskScheduler

TaskScheduler 續接任務關聯並用於執行。

傳回

Task<TNewResult>

一個新的續集 Task<TResult>

例外狀況

scheduler 點為 null

備註

回傳 Task<TResult> 的任務不會排程執行,直到目前任務完成,無論是因成功完成、因未處理異常而錯誤,或因被取消而提前退出。

另請參閱

適用於

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

來源:
Future.cs
來源:
Task_T.cs
來源:
Future.cs
來源:
Future.cs
來源:
Future.cs

建立一個續接,當目標 Task<TResult> 完成時執行。

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);
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>
Public Function ContinueWith(Of TNewResult) (continuationFunction As Func(Of Task(Of TResult), Object, TNewResult), state As Object, cancellationToken As CancellationToken) As Task(Of TNewResult)

類型參數

TNewResult

續寫所產生的結果類型。

參數

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

一個在完成時 Task<TResult> 執行的函式。 執行時,代理會被傳遞已完成的任務以及呼叫者提供的狀態物件作為參數。

state
Object

一個代表由延續函數使用的資料的物件。

cancellationToken
CancellationToken

CancellationToken 個會被分配到新的任務上。

傳回

Task<TNewResult>

一個新的續集 Task<TResult>

例外狀況

continuationFunction 點為 null

所提供的 CancellationToken 已經被處理掉。

備註

回傳 Task<TResult> 的任務不會排程執行,直到目前任務完成,無論是因成功完成、因未處理異常而錯誤,或因被取消而提前退出。

另請參閱

適用於

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

來源:
Future.cs
來源:
Task_T.cs
來源:
Future.cs
來源:
Future.cs
來源:
Future.cs

建立一個續接,當目標 Task<TResult> 完成時執行。

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);
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

續寫所產生的結果類型。

參數

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

一個在完成時 Task<TResult> 執行的函式。 執行時,代理會被傳遞已完成的任務以及呼叫者提供的狀態物件作為參數。

state
Object

一個代表由延續函數使用的資料的物件。

continuationOptions
TaskContinuationOptions

關於續作何時安排以及它的行為方式的選項。 這包括條件,如 OnlyOnCanceled,以及執行選項,如 ExecuteSynchronously

傳回

Task<TNewResult>

一個新的續集 Task<TResult>

例外狀況

continuationFunction 點為 null

continuationOptions參數指定了一個無效的值。TaskContinuationOptions

備註

回傳 Task<TResult> 的任務不會排程執行,直到目前任務完成,無論是因成功完成、因未處理異常而錯誤,或因被取消而提前退出。

執行時continuationFunction,應回傳 。Task<TResult> 此任務的完成狀態將轉移到從 ContinueWith 呼叫回傳的任務上。

另請參閱

適用於

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

來源:
Future.cs
來源:
Task_T.cs
來源:
Future.cs
來源:
Future.cs
來源:
Future.cs

建立一個延續,依照 中 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

續寫所產生的結果類型。

參數

continuationFunction
Func<Task<TResult>,TNewResult>

一個根據 中 continuationOptions指定的條件執行的函數。

執行時,代表會收到已完成的任務作為參數。

continuationOptions
TaskContinuationOptions

關於續作何時安排以及它的行為方式的選項。 這包括條件,如 OnlyOnCanceled,以及執行選項,如 ExecuteSynchronously

傳回

Task<TNewResult>

一個新的續集 Task<TResult>

例外狀況

這些 Task<TResult> 已經被處理掉了。

continuationFunction 點為 null

continuationOptions參數指定了一個無效的值。TaskContinuationOptions

備註

回傳 Task<TResult> 的任務不會排程執行,直到目前任務完成,無論是因成功完成、因未處理異常而錯誤,或因被取消而提前退出。

執行時continuationFunction,應回傳 。Task<TResult>

另請參閱

適用於

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

來源:
Future.cs
來源:
Task_T.cs
來源:
Future.cs
來源:
Future.cs
來源:
Future.cs

建立一個續接,當目標 Task<TResult> 完成時會非同步執行。

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>
Public Function ContinueWith(Of TNewResult) (continuationFunction As Func(Of Task(Of TResult), TNewResult), cancellationToken As CancellationToken) As Task(Of TNewResult)

類型參數

TNewResult

續寫所產生的結果類型。

參數

continuationFunction
Func<Task<TResult>,TNewResult>

一個在完成時 Task<TResult> 執行的函式。 執行時,代表會收到已完成的任務作為參數。

cancellationToken
CancellationToken

CancellationToken 個會被分配到新的任務上。

傳回

Task<TNewResult>

一個新的續集 Task<TResult>

例外狀況

這些 Task<TResult> 已經被處理掉了。

-或-

CancellationTokenSource那個已經被cancellationToken處理掉的。

continuationFunction 點為 null

備註

回傳 Task<TResult> 的任務不會排程執行,直到目前任務完成,無論是因成功完成、因未處理異常而錯誤,或因被取消而提前退出。

另請參閱

適用於

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

來源:
Future.cs
來源:
Task_T.cs
來源:
Future.cs
來源:
Future.cs
來源:
Future.cs

建立一個續接,當目標 Task<TResult> 完成時執行。

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);
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

續寫所產生的結果類型。

參數

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

一個在完成時 Task<TResult> 執行的函式。 執行時,代理會被傳遞已完成的任務以及呼叫者提供的狀態物件作為參數。

state
Object

一個代表由延續函數使用的資料的物件。

傳回

Task<TNewResult>

一個新的續集 Task<TResult>

例外狀況

continuationFunction 點為 null

範例

以下範例建立一連串續寫任務。 每個任務提供方法狀態參數DateTime的當前時間,也就是物件ContinueWith(Action<Task,Object>, Object)。 每個 DateTime 值代表繼續任務建立的時間點。 每個任務的結果會產生第二個 DateTime 值,代表任務完成的時間。 所有任務結束後,範例會顯示每個續接任務開始與結束的日期與時間。

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> 的任務不會排程執行,直到目前任務完成,無論是因成功完成、因未處理異常而錯誤,或因被取消而提前退出。

另請參閱

適用於

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

來源:
Future.cs
來源:
Task_T.cs
來源:
Future.cs
來源:
Future.cs
來源:
Future.cs

建立一個續接,當目標 Task<TResult> 完成時會非同步執行。

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

續寫所產生的結果類型。

參數

continuationFunction
Func<Task<TResult>,TNewResult>

一個在完成時 Task<TResult> 執行的函式。 執行時,代表會收到已完成的任務作為參數。

傳回

Task<TNewResult>

一個新的續集 Task<TResult>

例外狀況

這些 Task<TResult> 已經被處理掉了。

continuationFunction 點為 null

備註

回傳 Task<TResult> 的任務不會排程執行,直到目前任務完成,無論是因成功完成、因未處理異常而錯誤,或因被取消而提前退出。

另請參閱

適用於

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

來源:
Future.cs
來源:
Task_T.cs
來源:
Future.cs
來源:
Future.cs
來源:
Future.cs

建立一個續接,當目標 Task<TResult> 完成時會非同步執行。

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

續寫所產生的結果類型。

參數

continuationFunction
Func<Task<TResult>,TNewResult>

一個在完成時 Task<TResult> 執行的函式。 執行時,代表會收到已完成的任務作為參數。

scheduler
TaskScheduler

TaskScheduler 續接任務關聯並用於執行。

傳回

Task<TNewResult>

一個新的續集 Task<TResult>

例外狀況

這些 Task<TResult> 已經被處理掉了。

continuationFunction 點為 null

-或-

scheduler 點為 null

備註

回傳 Task<TResult> 的任務不會排程執行,直到目前任務完成,無論是因成功完成、因未處理異常而錯誤,或因被取消而提前退出。

另請參閱

適用於