Task.Start 方法

定義

開始 Task

多載

名稱 Description
Start()

啟動 , Task排程執行至目前 TaskScheduler

Start(TaskScheduler)

啟動 , Task排程執行至 指定 TaskScheduler

Start()

啟動 , Task排程執行至目前 TaskScheduler

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

例外狀況

Task該實例已被處理。

目前 Task 的狀態無法啟動。 它可能已經被啟動、執行或取消,或者是以不支援直接排程的方式建立。

範例

以下範例 Task(Action) 呼叫建構子實例化一個新 Task 物件,該物件顯示其任務 ID 與管理執行緒 ID,並執行迴圈。 接著它呼叫該 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
open System.Threading
open System.Threading.Tasks

let t =
    new Task(fun () ->
        printfn $"Task {Task.CurrentId} running on thread {Thread.CurrentThread.ManagedThreadId}"

        for i = 1 to 10 do
            printfn $"   Iteration {i}")

t.Start()
t.Wait() |> ignore

// 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

備註

任務只能啟動並執行一次。 任何第二次排程任務的嘗試都會導致例外。

用來 Start 執行由其中一個 Task 建構子建立的任務。 通常,當你需要將任務的建立與執行分開時,例如你有條件地執行已建立的任務時,你會這麼做。 對於較常見的情況,不需要將任務實例化與執行分開,我們建議你呼叫 or TaskFactory.StartNew 方法的超載Task.Run

關於任務操作拋出的異常處理資訊,請參見 異常處理

另請參閱

適用於

Start(TaskScheduler)

啟動 , Task排程執行至 指定 TaskScheduler

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該實例已被處理。

排程器無法排隊此任務。

備註

一個任務只能啟動並執行一次。 任何第二次排程任務的嘗試都會導致例外。

關於任務操作拋出的異常處理資訊,請參見 異常處理

另請參閱

適用於