次の方法で共有


Task.Start メソッド

定義

Task を開始します。

オーバーロード

Start()

現在の TaskTaskScheduler の実行をスケジュールし、それを開始します。

Start(TaskScheduler)

指定された TaskTaskScheduler の実行をスケジュールし、それを開始します。

Start()

現在の TaskTaskScheduler の実行をスケジュールし、それを開始します。

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

例外

Task インスタンスは破棄されています。

Task は、開始する有効な状態にはありません。 既に開始、実行、またはキャンセルされたか、ダイレクト スケジューリングをサポートしない方法で作成された可能性があります。

次の例では、コンストラクターを Task(Action) 呼び出して、タスク ID とマネージド スレッド ID を表示する新しい Task オブジェクトをインスタンス化し、ループを実行します。 その後、メソッドを Start 呼び出してタスクを実行します。 これはコンソール アプリであるため、タスクの実行が完了する前に Wait アプリが終了するのを防ぐために、メソッドの呼び出しが必要です。

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

public class Example
{
   public static void Main()
   {
      var t = new Task( () => { Console.WriteLine("Task {0} running on thread {1}",
                                                  Task.CurrentId, Thread.CurrentThread.ManagedThreadId);
                                for (int ctr = 1; ctr <= 10; ctr++)
                                   Console.WriteLine("   Iteration {0}", ctr); } 
                        );
      t.Start();
      t.Wait();   
   }
}
// The example displays output like the following:
//     Task 1 running on thread 3
//        Iteration 1
//        Iteration 2
//        Iteration 3
//        Iteration 4
//        Iteration 5
//        Iteration 6
//        Iteration 7
//        Iteration 8
//        Iteration 9
//        Iteration 10
Imports System.Threading
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim t As New Task(Sub()
                           Console.WriteLine("Task {0} running on thread {1}",
                                             Task.CurrentId, Thread.CurrentThread.ManagedThreadId )
                           For ctr As Integer = 1 To 10
                              Console.WriteLine("   Iteration {0}", ctr)
                           Next   
                        End Sub)
      t.Start
      t.Wait()   
   End Sub
End Module
' The example displays output like the following:
'     Task 1 running on thread 3
'        Iteration 1
'        Iteration 2
'        Iteration 3
'        Iteration 4
'        Iteration 5
'        Iteration 6
'        Iteration 7
'        Iteration 8
'        Iteration 9
'        Iteration 10

注釈

タスクは 1 回だけ開始して実行できます。 2 回目にタスクをスケジュールしようとすると、例外が発生します。

これは Start 、いずれかのコンストラクターを呼び出すことによって作成されたタスクを Task 実行するために使用されます。 通常、タスクの作成と実行を分離する必要がある場合 (作成したタスクを条件付きで実行する場合など) にこれを行います。 タスクのインスタンス化を実行から分離する必要がない一般的なケースでは、or TaskFactory.StartNew メソッドのTask.Runオーバーロードを呼び出することをお勧めします。

タスク操作によってスローされる例外の処理については、「 例外処理」を参照してください。

こちらもご覧ください

適用対象

Start(TaskScheduler)

指定された TaskTaskScheduler の実行をスケジュールし、それを開始します。

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

パラメーター

scheduler
TaskScheduler

このタスクを関連付けて実行する TaskScheduler

例外

scheduler 引数が null です。

Task は、開始する有効な状態にはありません。 既に開始、実行、またはキャンセルされたか、ダイレクト スケジューリングをサポートしない方法で作成された可能性があります。

Task インスタンスは破棄されています。

スケジューラは、このタスクをキューに入れられませんでした。

注釈

タスクは 1 回だけ開始して実行できます。 2 回目にタスクをスケジュールしようとすると、例外が発生します。

タスク操作によってスローされる例外の処理については、「 例外処理」を参照してください。

こちらもご覧ください

適用対象