語言

ValueTask 結構

定義

提供異步操作的可等候結果。

public value class ValueTask : IEquatable<System::Threading::Tasks::ValueTask>
public readonly struct ValueTask : IEquatable<System.Threading.Tasks.ValueTask>
type ValueTask = struct
Public Structure ValueTask
Implements IEquatable(Of ValueTask)
繼承
ValueTask
實作

備註

一個 ValueTask 實例可以被等待,也可以被轉換成 Task 使用 AsTask。 一個 ValueTask 實例只能等待一次,消費者在實例完成前不得撥打 GetAwaiter() 電話。 若這些限制無法接受,則透過呼叫 ValueTask將 Task 轉換為 。AsTask

以下操作絕不應對任何 ValueTask 實例執行:

  • 多次等待實例。
  • 打了好幾通電話 AsTask 。
  • 使用多種技巧來消費實例。

如果你做上述任何一項,結果將無法定義。

A ValueTask 是一個結構,可以包裹 a Task 或實 IValueTaskSource 例。 從非同步方法回傳ValueTask包裹實例的 aIValueTaskSource,使高吞吐量應用程式能透過使用可IValueTaskSource重用物件池來避免配置。 欲了解更多資訊,請參閱 《理解 ValueTask 的初次、為何與何時》。

使用 a ValueTask 代替 a Task 會增加一些開銷。 由於 ValueTask 是一個包含多個欄位的結構,從方法回傳會比回傳單一 Task 參考資料多。 因此,任何不回傳結果的非同步方法的預設選擇應是回傳 Task。 只有在績效分析證明其值得時,才應使用 a ValueTask 代替 Task。 當一個返回 的方法Task.CompletedTask同步且成功完成時,應用來Task回傳成功完成的單例。

Note

從 C# 7.0 起支援使用 ValueTask 類型,且任何版本的 Visual Basic 都不支援。

Note

使用無參數建構子或語 default(ValueTask) 法(零初始化結構)建立的實例代表同步且成功完成的操作。

建構函式

名稱 Description
ValueTask(IValueTaskSource, Int16)

使用所提供的ValueTask物件初始化該類別的新實例IValueTaskSource,該物件代表該操作。

ValueTask(Task)

使用所提供的任務初始化該類別的新實例 ValueTask ,該任務代表該操作。

屬性

名稱 Description
CompletedTask

拿到一個已經成功完成的任務。

IsCanceled

會得到一個值,指示該物件是否代表已取消的操作。

IsCompleted

會得到一個值,表示該物件是否代表已完成的操作。

IsCompletedSuccessfully

會取得一個值,表示該物件是否代表成功完成的操作。

IsFaulted

會取得一個值,表示該物件是否代表失敗的操作。

方法

名稱 Description
AsTask()

取 Task 一個代表此的 ValueTask物件。

ConfigureAwait(Boolean)

為此值配置等待器。

Equals(Object)

判斷指定物件是否等於當前 ValueTask 實例。

Equals(ValueTask)

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

FromCanceled(CancellationToken)

會用指定的取消標記建立 ValueTask 一個因取消而已完成的

FromCanceled<TResult>(CancellationToken)

會用指定的取消標記建立 ValueTask<TResult> 一個因取消而已完成的

FromException(Exception)

建立 ValueTask 一個已完成且符合指定例外的 。

FromException<TResult>(Exception)

建立 ValueTask<TResult> 一個已完成且符合指定例外的 。

FromResult<TResult>(TResult)

建立 ValueTask<TResult> 一個成功完成且符合指定結果的 。

GetAwaiter()

這會創造一個等待這個價值的玩家。

GetHashCode()

傳回這個實例的哈希碼。

Preserve()

拿到 ValueTask 一個未來隨時可能使用的。

運算子

名稱 Description
Equality(ValueTask, ValueTask)

比較兩個 ValueTask 平等的價值。

Inequality(ValueTask, ValueTask)

判斷兩個 ValueTask 值是否不相等。

適用於