Task.RunSynchronously Task.RunSynchronously Task.RunSynchronously Task.RunSynchronously Method

定義

現在の TaskSchedulerTask を同期的に実行します。Runs the Task synchronously on the current TaskScheduler.

オーバーロード

RunSynchronously() RunSynchronously() RunSynchronously() RunSynchronously()

現在の TaskSchedulerTask を同期的に実行します。Runs the Task synchronously on the current TaskScheduler.

RunSynchronously(TaskScheduler) RunSynchronously(TaskScheduler) RunSynchronously(TaskScheduler) RunSynchronously(TaskScheduler)

指定された TaskTaskScheduler を同期的に実行します。Runs the Task synchronously on the TaskScheduler provided.

RunSynchronously() RunSynchronously() RunSynchronously() RunSynchronously()

現在の TaskSchedulerTask を同期的に実行します。Runs the Task synchronously on the current TaskScheduler.

public:
 void RunSynchronously();
public void RunSynchronously ();
member this.RunSynchronously : unit -> unit
Public Sub RunSynchronously ()

例外

Task インスタンスは破棄されています。The Task instance has been disposed.

Task は、開始する有効な状態にはありません。The Task is not in a valid state to be started. 既に開始、実行、またはキャンセルされたか、ダイレクト スケジューリングをサポートしない方法で作成された可能性があります。It may have already been started, executed, or canceled, or it may have been created in a manner that doesn't support direct scheduling.

次の例では、呼び出すことによって実行されるタスク、RunSynchronouslyメソッドを 1 つの非同期的に実行します。The following example compares a task executed by calling the RunSynchronously method with one executed asynchronously. どちらの場合も、タスクの実行タスクの ID とスレッドの ID を表示する同等のラムダ式で、タスクが実行されています。In both cases, the tasks execute identical lambda expressions that display the task ID and the ID of the thread on which the task is running. タスクは、1 から 1,000,000 までの整数の合計を計算します。The task calculates the sum of the integers between 1 and 1,000,000. 呼び出して、タスクを実行、出力の例に示すよう、RunSynchronouslyメソッドの実行、アプリケーションのスレッドで非同期タスクではありません。As the output from the example shows, the task executed by calling the RunSynchronously method runs on the application thread, while the asynchronous task does not.

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

public class Example
{
   public static void Main()
   {
      Console.WriteLine("Application executing on thread {0}",
                        Thread.CurrentThread.ManagedThreadId);
      var asyncTask = Task.Run( () => {  Console.WriteLine("Task {0} (asyncTask) executing on Thread {1}",
                                                           Task.CurrentId,
                                                           Thread.CurrentThread.ManagedThreadId);
                                         long sum = 0;
                                         for (int ctr = 1; ctr <= 1000000; ctr++ )
                                            sum += ctr;
                                         return sum;
                                      });
      var syncTask = new Task<long>( () =>  { Console.WriteLine("Task {0} (syncTask) executing on Thread {1}",
                                                                 Task.CurrentId,
                                                                 Thread.CurrentThread.ManagedThreadId);
                                              long sum = 0;
                                              for (int ctr = 1; ctr <= 1000000; ctr++ )
                                                 sum += ctr;
                                              return sum;
                                            });
      syncTask.RunSynchronously();
      Console.WriteLine();
      Console.WriteLine("Task {0} returned {1:N0}", syncTask.Id, syncTask.Result);
      Console.WriteLine("Task {0} returned {1:N0}", asyncTask.Id, asyncTask.Result);
   }
}
// The example displays the following output:
//       Application executing on thread 1
//       Task 1 (syncTask) executing on Thread 1
//       Task 2 (asyncTask) executing on Thread 3
//       1 status: RanToCompletion
//       2 status: RanToCompletion
//
//       Task 2 returned 500,000,500,000
//       Task 1 returned 500,000,500,000
Imports System.Threading
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Console.WriteLine("Application executing on thread {0}",
                        Thread.CurrentThread.ManagedThreadId)
      Dim asyncTask = Task.Run( Function()
                                   Console.WriteLine("Task {0} (asyncTask) executing on Thread {1}",
                                                     Task.CurrentId,
                                                     Thread.CurrentThread.ManagedThreadId)
                                   Dim sum As Long = 0
                                   For ctr As Integer = 1 To 1000000
                                      sum += ctr
                                   Next
                                   Return sum
                                End Function)
      Dim syncTask As New Task(Of Long)( Function()
                                            Console.WriteLine("Task {0} (syncTask) executing on Thread {1}",
                                                              Task.CurrentId,
                                                              Thread.CurrentThread.ManagedThreadId)
                                            Dim sum As Long = 0
                                            For ctr As Integer = 1 To 1000000
                                               sum += ctr
                                            Next
                                            Return sum
                                         End Function)
      syncTask.RunSynchronously()
      Console.WriteLine()
      Console.WriteLine("Task {0} returned {1:N0}", syncTask.Id, syncTask.Result)
      Console.WriteLine("Task {0} returned {1:N0}", asyncTask.Id, asyncTask.Result)
   End Sub
End Module
' The example displays the following output:
'       Application executing on thread 1
'       Task 1 (syncTask) executing on Thread 1
'       Task 2 (asyncTask) executing on Thread 3
'       1 status: RanToCompletion
'       2 status: RanToCompletion
'
'       Task 2 returned 500,000,500,000
'       Task 1 returned 500,000,500,000

注釈

通常、タスクはスレッド プールのスレッドで非同期的に実行され、呼び出し元のスレッドをブロックしないでください。Ordinarily, tasks are executed asynchronously on a thread pool thread and do not block the calling thread. 呼び出すことによって実行されるタスク、RunSynchronously()メソッドは、現在に関連付けられたTaskScheduler呼び出し元のスレッドで実行されます。Tasks executed by calling the RunSynchronously() method are associated with the current TaskScheduler and are run on the calling thread. ターゲットのスケジューラが呼び出し元のスレッドでこのタスクの実行をサポートしていない場合、スケジューラで実行するため、タスクがスケジュールされ、タスクの実行が完了するまで呼び出し元のスレッドがブロックされます。If the target scheduler does not support running this task on the calling thread, the task will be scheduled for execution on the scheduler, and the calling thread will block until the task has completed execution. 呼び出し元のスレッドが呼び出す必要がありますが、タスクを同期的に実行する場合でもWaitタスクがスローされる例外を処理します。Even though the task runs synchronously, the calling thread should still call Wait to handle any exceptions that the task might throw. 例外処理の詳細については、次を参照してください。例外処理します。For more information on exception handling, see Exception Handling.

呼び出すことによって実行されるタスク、RunSynchronouslyメソッドは呼び出しをインスタンス化、TaskまたはTask<TResult>クラスのコンス トラクター。Tasks executed by calling the RunSynchronously method are instantiated by calling a Task or Task<TResult> class constructor. タスクを同期的に実行する必要があります、Created状態。The task to be run synchronously must be in the Created state. タスクの開始し、1 回だけ実行可能性があります。A task may be started and run only once. 例外時の結果が 2 番目のタスクをスケジュールしようとするとします。Any attempts to schedule a task a second time results in an exception.

こちらもご覧ください

RunSynchronously(TaskScheduler) RunSynchronously(TaskScheduler) RunSynchronously(TaskScheduler) RunSynchronously(TaskScheduler)

指定された TaskTaskScheduler を同期的に実行します。Runs the Task synchronously on the TaskScheduler provided.

public:
 void RunSynchronously(System::Threading::Tasks::TaskScheduler ^ scheduler);
public void RunSynchronously (System.Threading.Tasks.TaskScheduler scheduler);
member this.RunSynchronously : System.Threading.Tasks.TaskScheduler -> unit
Public Sub RunSynchronously (scheduler As TaskScheduler)

パラメーター

scheduler
TaskScheduler TaskScheduler TaskScheduler TaskScheduler

このタスク インラインの実行を試みるスケジューラ。The scheduler on which to attempt to run this task inline.

例外

Task インスタンスは破棄されています。The Task instance has been disposed.

scheduler 引数が null です。The scheduler argument is null.

Task は、開始する有効な状態にはありません。The Task is not in a valid state to be started. 既に開始、実行、またはキャンセルされたか、ダイレクト スケジューリングをサポートしない方法で作成された可能性があります。It may have already been started, executed, or canceled, or it may have been created in a manner that doesn't support direct scheduling.

注釈

呼び出すことによって実行されるタスク、RunSynchronouslyメソッドは呼び出しをインスタンス化、TaskまたはTask<TResult>クラスのコンス トラクター。Tasks executed by calling the RunSynchronously method are instantiated by calling a Task or Task<TResult> class constructor. タスクを同期的に実行する必要があります、Created状態。The task to be run synchronously must be in the Created state. タスクの開始し、1 回だけ実行可能性があります。A task may be started and run only once. 例外時の結果が 2 番目のタスクをスケジュールしようとするとします。Any attempts to schedule a task a second time results in an exception.

ターゲットのスケジューラが現在のスレッドでこのタスクの実行をサポートしていない場合、スケジューラで実行するため、タスクがスケジュールされ、タスクの実行が完了するまで、現在のスレッドがブロックされます。If the target scheduler does not support running this task on the current thread, the task will be scheduled for execution on the scheduler, and the current thread will block until the task has completed execution. このためは、呼び出し元のスレッドはなどのメソッドを呼び出す必要ありませんWaitタスクの実行が完了したことを確認します。Because of this, the calling thread does not need to call a method such as Wait to ensure that the task has completed execution. タスク操作の例外処理の詳細については、次を参照してください。例外処理します。For more information on exception handling for task operations, see Exception Handling.

こちらもご覧ください

適用対象