共用方式為


Task<TResult> 類別

定義

表示可以傳回值的異步操作。

generic <typename TResult>
public ref class Task : System::Threading::Tasks::Task
public class Task<TResult> : System.Threading.Tasks.Task
type Task<'Result> = class
    inherit Task
Public Class Task(Of TResult)
Inherits Task

類型參數

TResult

由此產生 Task<TResult>的結果類型。

繼承
Task<TResult>

備註

Task<TResult> 類別代表一個回傳值的單一操作,通常以非同步方式執行。 Task<TResult> 物件是 .NET Framework 4 中首次導入之工作 架構異步模式 的其中一個中央元件。 由於物件所 Task<TResult> 執行的工作通常會以異步方式在線程集區線程上執行,而不是在主要應用程式線程上同步執行,因此您可以使用 Status 屬性 IsCanceled以及、 IsCompletedIsFaulted 屬性來判斷工作的狀態。 最常見的是,Lambda 運算式是用來指定工作要執行的工作。

Task<TResult> 實例可以用多種方式建立。 最常見的方法,從 .NET Framework 4.5 開始,是呼叫靜態 Task.Run<TResult>(Func<TResult>)Task.Run<TResult>(Func<TResult>, CancellationToken) 方法。 這些方法提供簡單的方法來使用預設值來啟動工作,而不需取得其他參數。 下列範例使用 Task.Run<TResult>(Func<TResult>) 方法來啟動一個循環任務,然後顯示循環的次數:

using System;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      var t = Task<int>.Run( () => {
                                      // Just loop.
                                      int max = 1000000;
                                      int ctr = 0;
                                      for (ctr = 0; ctr <= max; ctr++) {
                                         if (ctr == max / 2 && DateTime.Now.Hour <= 12) {
                                            ctr++;
                                            break;
                                         }
                                      }
                                      return ctr;
                                    } );
      Console.WriteLine("Finished {0:N0} iterations.", t.Result);
   }
}
// The example displays output like the following:
//        Finished 1,000,001 loop iterations.
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim t As Task(Of Integer) = Task.Run(Function()
                                  Dim max As Integer = 1000000
                                  Dim ctr As Integer
                                  For ctr = 0 to max
                                     If ctr = max \ 2 And Date.Now.Hour <= 12 Then
                                        ctr += 1
                                        Exit For
                                     End If
                                  Next
                                  Return ctr
                               End Function)
      Console.WriteLine("Finished {0:N0} iterations.", t.Result)
   End Sub
End Module
' The example displays the following output:
'       Finished 1,000,001 loop iterations

另一種且最常見的 .NET Framework 4 任務啟動方式是呼叫靜態 TaskFactory.StartNewTaskFactory<TResult>.StartNew 方法。 屬性回 Task.Factory 傳一個 TaskFactory 物件, Task<TResult>.Factory 屬性回傳一個 TaskFactory<TResult> 物件。 他們方法的 StartNew 重載可以讓你傳遞參數、定義任務建立選項,並指定任務排程器。 下列範例會使用 TaskFactory<TResult>.StartNew(Func<TResult>) 方法來啟動工作。 它在功能上相當於上一個範例中的程序代碼。

using System;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      var t = Task<int>.Factory.StartNew( () => {
                                      // Just loop.
                                      int max = 1000000;
                                      int ctr = 0;
                                      for (ctr = 0; ctr <= max; ctr++) {
                                         if (ctr == max / 2 && DateTime.Now.Hour <= 12) {
                                            ctr++;
                                            break;
                                         }
                                      }
                                      return ctr;
                               } );
      Console.WriteLine("Finished {0:N0} iterations.", t.Result);
   }
}
// The example displays the following output:
//        Finished 1000001 loop iterations
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim t = Task(Of Integer).Factory.StartNew(Function()
                                  Dim max As Integer = 1000000
                                  Dim ctr As Integer
                                  For ctr = 0 to max
                                     If ctr = max \ 2 And Date.Now.Hour <= 12 Then
                                       ctr += 1
                                       Exit For
                                     End If
                                  Next
                                  Return ctr
                               End Function)
      Console.WriteLine("Finished {0:N0} iterations.", t.Result)
   End Sub
End Module
' The example displays output like the following:
'       Finished 1,000,001 iterations

如需更完整的範例,請參閱 以工作為基礎的異步程序設計

類別 Task<TResult> 也提供可初始化工作的建構函式,但不會排程執行工作。 出於效能考量, Task.RunTask.Factory.StartNew 方法是建立與排程計算任務的首選機制,但在任務建立與排程必須分離的情境下,可以使用建構子,然後用任務的方法 Start 來排程任務以待日後執行。

從以 .NET Framework 4.6 為目標的桌面應用程式開始,建立和叫用工作的線程文化特性會成為線程內容的一部分。 也就是說,不論工作執行所在的線程目前文化特性為何,工作目前的文化特性都是呼叫線程的文化特性。 對於以 .NET Framework 4.6 之前 .NET Framework 版本為目標的應用程式,工作的文化特性是工作執行所在的線程文化特性。 如需詳細資訊,請參閱主題中的 CultureInfo 內的「文化和以任務為基礎的非同步作業」一節。 請注意,市集應用程式會遵循 Windows 執行時間設定並取得預設文化特性。

對於不回傳值的操作,你使用 該 Task 類別。 從 C# 7.0 開始,對於較輕量級且是值型別而非參考型別的任務,請使用結構 System.Threading.Tasks.ValueTask<TResult>

建構函式

名稱 Description
Task<TResult>(Func<Object,TResult>, Object, CancellationToken, TaskCreationOptions)

初始化一個包含指定動作、狀態和選項的新物件 Task<TResult>

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

初始化一個包含指定動作、狀態和選項的新物件 Task<TResult>

Task<TResult>(Func<Object,TResult>, Object, TaskCreationOptions)

初始化一個包含指定動作、狀態和選項的新物件 Task<TResult>

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

初始 Task<TResult> 化一個包含指定函數與狀態的新資料。

Task<TResult>(Func<TResult>, CancellationToken, TaskCreationOptions)

初始 Task<TResult> 化一個新的,使用指定的函式與建立選項。

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

初始化 Task<TResult> 一個新函式,並使用指定函式。

Task<TResult>(Func<TResult>, TaskCreationOptions)

初始 Task<TResult> 化一個新的,使用指定的函式與建立選項。

Task<TResult>(Func<TResult>)

初始化 Task<TResult> 一個新函式,並使用指定函式。

屬性

名稱 Description
AsyncState

取得建立時 Task 提供的狀態物件,若沒有提供則為 null。

(繼承來源 Task)
CreationOptions

TaskCreationOptions 來完成這個任務。

(繼承來源 Task)
Exception

這也說明 AggregateException 了導致他們 Task 提前結束的原因。 若 Task 成功完成或尚未拋出任何例外,則會返回 null

(繼承來源 Task)
Factory

取得工廠方法來建立和設定 Task<TResult> 實例。

Id

這次會拿到ID Task

(繼承來源 Task)
IsCanceled

會判斷這個 Task 實例是否因為被取消而完成執行。

(繼承來源 Task)
IsCompleted

取得值,這個值表示工作是否已完成。

(繼承來源 Task)
IsCompletedSuccessfully

取得工作是否執行完成。

(繼承來源 Task)
IsFaulted

判斷是否 Task 因未處理的例外而完成。

(繼承來源 Task)
Result

得到此 Task<TResult>值的結果值。

Status

明白 TaskStatus 這個任務。

(繼承來源 Task)

方法

名稱 Description
ConfigureAwait(Boolean)

配置一個等待者,過去會等待這個 Task<TResult>

ConfigureAwait(ConfigureAwaitOptions)

配置一個等待者,過去會等待這個 Task

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

建立一個延續,接收呼叫者提供的狀態資訊及取消標記,並在目標 Task 完成時執行。 接續會根據一組指定的條件執行,並使用指定的排程器。

(繼承來源 Task)
ContinueWith(Action<Task,Object>, Object, CancellationToken)

建立一個延續,接收呼叫者提供的狀態資訊及取消標記,並在目標 Task 完成時非同步執行。

(繼承來源 Task)
ContinueWith(Action<Task,Object>, Object, TaskContinuationOptions)

建立一個延續,接收呼叫者提供的狀態資訊,並在目標 Task 完成時執行。 接續會根據一組指定的條件執行。

(繼承來源 Task)
ContinueWith(Action<Task,Object>, Object, TaskScheduler)

建立一個續接,接收呼叫者提供的狀態資訊,並在目標 Task 完成時非同步執行。 接續會使用指定的排程器。

(繼承來源 Task)
ContinueWith(Action<Task,Object>, Object)

建立一個延續,接收呼叫者提供的狀態資訊,並在目標 Task 完成時執行。

(繼承來源 Task)
ContinueWith(Action<Task<TResult>,Object>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ContinueWith(Action<Task<TResult>>)

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

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

建立一個延續,當目標任務依指定 TaskContinuationOptions條件競爭時執行。 接續會接收取消令牌,並使用指定的排程器。

(繼承來源 Task)
ContinueWith(Action<Task>, CancellationToken)

建立一個延續,當目標 Task 完成時接收取消標記並非同步執行。

(繼承來源 Task)
ContinueWith(Action<Task>, TaskContinuationOptions)

建立一個延續,當目標任務完成時,依照指定 TaskContinuationOptions條件執行。

(繼承來源 Task)
ContinueWith(Action<Task>, TaskScheduler)

建立一個續接,當目標 Task 完成時會非同步執行。 接續會使用指定的排程器。

(繼承來源 Task)
ContinueWith(Action<Task>)

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

(繼承來源 Task)
ContinueWith<TNewResult>(Func<Task<TResult>,Object,TNewResult>, Object, CancellationToken, TaskContinuationOptions, 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>,Object,TNewResult>, Object, TaskScheduler)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

建立一個延續,當目標 Task 完成並回傳值時,根據指定的任務延續選項執行。 接續會接收呼叫端提供的狀態資訊和取消令牌,並使用指定的排程器。

(繼承來源 Task)
ContinueWith<TResult>(Func<Task,Object,TResult>, Object, CancellationToken)

建立一個延續,當目標 Task 完成並回傳一個值時,會非同步執行。 接續會接收呼叫端提供的狀態資訊和取消令牌。

(繼承來源 Task)
ContinueWith<TResult>(Func<Task,Object,TResult>, Object, TaskContinuationOptions)

建立一個延續,當目標 Task 完成時,根據指定的任務繼續選項執行。 接續會接收呼叫端提供的狀態資訊。

(繼承來源 Task)
ContinueWith<TResult>(Func<Task,Object,TResult>, Object, TaskScheduler)

建立一個續接,當目標 Task 完成時會非同步執行。 接續會接收呼叫端提供的狀態資訊,並使用指定的排程器。

(繼承來源 Task)
ContinueWith<TResult>(Func<Task,Object,TResult>, Object)

建立一個延續,接收呼叫者提供的狀態資訊,當目標 Task 完成並回傳值時,會非同步執行。

(繼承來源 Task)
ContinueWith<TResult>(Func<Task,TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler)

建立根據指定接續選項執行的接續,並傳回值。 接續會傳遞取消令牌,並使用指定的排程器。

(繼承來源 Task)
ContinueWith<TResult>(Func<Task,TResult>, CancellationToken)

建立一個延續,當目標 Task 完成並回傳一個值時,會非同步執行。 接續會接收取消令牌。

(繼承來源 Task)
ContinueWith<TResult>(Func<Task,TResult>, TaskContinuationOptions)

建立根據指定接續選項執行的接續,並傳回值。

(繼承來源 Task)
ContinueWith<TResult>(Func<Task,TResult>, TaskScheduler)

建立一個延續,當目標 Task 完成並回傳一個值時,會非同步執行。 接續會使用指定的排程器。

(繼承來源 Task)
ContinueWith<TResult>(Func<Task,TResult>)

建立一個延續,當目標 Task<TResult> 完成並回傳一個值時,會非同步執行。

(繼承來源 Task)
Dispose()

釋放目前類別實例 Task 所使用的所有資源。

(繼承來源 Task)
Dispose(Boolean)

處理掉 Task所有未管理的資源。

(繼承來源 Task)
Equals(Object)

判斷指定的物件是否等於目前的物件。

(繼承來源 Object)
GetAwaiter()

有個等待者用來等待這個 Task<TResult>

GetHashCode()

做為預設哈希函式。

(繼承來源 Object)
GetType()

取得目前實例的 Type

(繼承來源 Object)
MemberwiseClone()

建立目前 Object的淺層複本。

(繼承來源 Object)
RunSynchronously()

以電流TaskScheduler同步運行。Task

(繼承來源 Task)
RunSynchronously(TaskScheduler)

在提供的系統上同步運行TaskTaskScheduler

(繼承來源 Task)
Start()

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

(繼承來源 Task)
Start(TaskScheduler)

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

(繼承來源 Task)
ToString()

傳回表示目前 物件的字串。

(繼承來源 Object)
Wait()

等待 Task 執行完成。

(繼承來源 Task)
Wait(CancellationToken)

等待 Task 執行完成。 如果取消令牌在工作完成之前取消,等候就會終止。

(繼承來源 Task)
Wait(Int32, CancellationToken)

等待 Task 執行完成。 如果在工作完成之前取消逾時間隔或取消令牌,則等候會終止。

(繼承來源 Task)
Wait(Int32)

等待在 Task 指定毫秒內完成執行。

(繼承來源 Task)
Wait(TimeSpan, CancellationToken)

等待 Task 執行完成。

(繼承來源 Task)
Wait(TimeSpan)

等待在 Task 指定時間內完成執行。

(繼承來源 Task)
WaitAsync(CancellationToken)

會收到 Task<TResult> 一個「當這 Task<TResult> 件事完成或 CancellationToken 指定取消時才會完成」的訊息。

WaitAsync(TimeSpan, CancellationToken)

會得到 Task<TResult> 一個 會在完成時 Task<TResult> 完成、指定的逾時結束,或指定的 CancellationToken 取消請求時完成。

WaitAsync(TimeSpan, TimeProvider, CancellationToken)

會得到 Task<TResult> 一個 會在完成時 Task<TResult> 完成、指定的逾時結束,或指定的 CancellationToken 取消請求時完成。

WaitAsync(TimeSpan, TimeProvider)

得到 Task<TResult> 一個 會在該時間 Task<TResult> 結束或指定的超時結束時完成。

WaitAsync(TimeSpan)

得到 Task<TResult> 一個 會在該時間 Task<TResult> 結束或指定的超時結束時完成。

明確介面實作

名稱 Description
IAsyncResult.AsyncWaitHandle

獲得 WaitHandle 一個可以用來等待任務完成的選項。

(繼承來源 Task)
IAsyncResult.CompletedSynchronously

取得作業是否同步完成的指示。

(繼承來源 Task)

擴充方法

名稱 Description
AsAsyncAction(Task)

傳回代表已啟動工作的 Windows 運行時間異步動作。

AsAsyncOperation<TResult>(Task<TResult>)

會傳回 Windows 運行時間異步操作,代表傳回結果的已啟動工作。

DispatcherOperationWait(Task, TimeSpan)

等待標的 DispatcherOperation 資產完成指定時間。

DispatcherOperationWait(Task)

無限期等待底層 DispatcherOperation 完成。

IsDispatcherOperationTask(Task)

回傳一個值,表示此值 Task 是否與 DispatcherOperation相關聯。

適用於

執行緒安全性

除了 Dispose()之外,所有 的Task<TResult>成員都是執行緒安全的,且可同時從多個執行緒使用。

另請參閱