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() 電話。 若這些限制無法接受,則透過呼叫 AsTaskValueTask 轉換為 。Task

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

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

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

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

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

Note

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

Note

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

建構函式

名稱 Description
ValueTask(IValueTaskSource, Int16)

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

ValueTask(Task)

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

屬性

名稱 Description
IsCanceled

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

IsCompleted

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

IsCompletedSuccessfully

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

IsFaulted

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

方法

名稱 Description
AsTask()

Task 一個代表此的 ValueTask物件。

ConfigureAwait(Boolean)

為此值配置等待器。

Equals(Object)

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

Equals(ValueTask)

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

GetAwaiter()

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

GetHashCode()

傳回這個實例的哈希碼。

Preserve()

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

操作員

名稱 Description
Equality(ValueTask, ValueTask)

比較兩個 ValueTask 平等的價值。

Inequality(ValueTask, ValueTask)

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

適用於