Task<TResult>.ContinueWith メソッド

定義

別のタスクが完了したときに実行される継続タスクを作成します。

オーバーロード

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
ソース:
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
ソース:
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
ソース:
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
ソース:
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
ソース:
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> は破棄されています。

- または -

cancellationToken を作成した CancellationTokenSource は既に破棄されています。

continuationAction 引数が null です。

- または -

scheduler 引数が null です。

continuationOptions 引数が、TaskContinuationOptions の無効な値を指定しています。

注釈

返された Task は、現在のタスクが完了するまで実行スケジュールされません。 パラメーターで指定された条件が continuationOptions 満たされない場合、継続タスクはスケジュールではなく取り消されます。 詳細については、「継続タスクを使用したタスクの連結」を参照してください。

こちらもご覧ください

適用対象

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

ソース:
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
ソース:
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> は破棄されています。

- または -

cancellationToken を作成した CancellationTokenSource は破棄されています。

continuationAction 引数が null です。

次の例では、Eratosthenes のシーブを使用して 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] == 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.

通常、約 100,000 の値を指定すると、タイムアウト間隔が期限切れになり、イベントが Timer.Elapsed 発生し、キャンセル要求が設定されます。

注釈

現在のタスクが正常に完了するまで、未処理の例外によるエラーが発生した場合、または取り消されるために早期に終了するまで、現在のタスクが完了するまで、返 Task された は実行スケジュールされません。

こちらもご覧ください

適用対象

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

ソース:
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 の整数を渡し、その数値の最初の10 個の指数 (n 1 から 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
ソース:
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 です。

次の例では、Eratosthenes のシーブを使用して 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] == 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 された は実行スケジュールされません。

こちらもご覧ください

適用対象

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

ソース:
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
ソース:
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
ソース:
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> は破棄されています。

- または -

cancellationToken を作成した CancellationTokenSource は既に破棄されています。

continuationFunction 引数が null です。

- または -

scheduler 引数が null です。

continuationOptions 引数が、TaskContinuationOptions の無効な値を指定しています。

注釈

現在のタスクが正常に完了するまで、未処理の例外によるエラーが発生した場合、または取り消されるために早期に終了するまで、現在のタスクが完了するまで、返 Task<TResult> された は実行スケジュールされません。

continuationFunctionを実行すると、 は をTask<TResult>返す必要があります。

こちらもご覧ください

適用対象

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

ソース:
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
ソース:
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
ソース:
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
ソース:
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
ソース:
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> は破棄されています。

- または -

cancellationToken を作成した CancellationTokenSource は既に破棄されています。

continuationFunction 引数が null です。

注釈

現在のタスクが正常に完了するまで、未処理の例外によるエラーが発生した場合、または取り消されるために早期に終了するまで、現在のタスクが完了するまで、返 Task<TResult> された は実行スケジュールされません。

こちらもご覧ください

適用対象

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

ソース:
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 です。

次の例では、継続タスクのチェーンを作成します。 各タスクは、 メソッドの state 引数に DateTime 現在の時刻 (オブジェクト) を ContinueWith(Action<Task,Object>, Object) 提供します。 各 DateTime 値は、継続タスクが作成される時刻を表します。 各タスクは、その結果として、タスクが終了した時刻を表す 2 番目 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
ソース:
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
ソース:
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> は、現在のタスクが完了するまで実行のスケジュールは設定されません。完了が正常に完了したために完了したか、未処理の例外が原因でエラーが発生したか、取り消されたために早期に終了したか。

こちらもご覧ください

適用対象