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實例可以使用 等候或轉換成 TaskAsTaskValueTask實例只能等候一次,而且取用者在實例完成之前可能不會呼叫 GetAwaiter() 。 如果無法接受這些限制,請呼叫 AsTaskValueTaskTask 轉換為 。

在 實例上 ValueTask 不應執行下列作業:

  • 等候實例多次。
  • 多次呼叫 AsTask
  • 使用其中一種以上的技術來取用 實例。

如果您執行上述任一動作,則結果未定義。

ValueTask是可以包裝 TaskIValueTaskSource 實例的結構。 從非同步方法傳 ValueTaskIValueTaskSource 回包裝實例的 ,可讓高輸送量應用程式使用可重複使用 IValueTaskSource 的物件集區來避免配置。 如需詳細資訊,請參閱 瞭解 ValueTask 的原因、內容及時機

ValueTask使用 而不是 Task ,會產生一些額外負荷。 因為 ValueTask 是具有多個欄位的結構,所以從 方法傳回它會導致相較于傳回單 Task 一參考而複製更多資料。 因此,任何未傳回結果的非同步方法的預設選擇應該是傳回 Task 。 只有在效能分析證明應該使用 而不是 時,才值得 ValueTask 使用 TaskTask.CompletedTask當方法傳回同步且順利完成時,應該使用 屬性來傳回成功完成的單一 Task

注意

從 C# 7.0 開始,支援使用 ValueTask 類型,且不受任何 Visual Basic 版本支援。

注意

使用無參數建構函式或語法 default(ValueTask) 建立的實例, (零初始化的結構) 表示同步、成功完成的作業。

建構函式

ValueTask(IValueTaskSource, Int16)

使用所提供的 IValueTaskSource 物件 (代表作業),初始化 ValueTask 類別的新執行個體。

ValueTask(Task)

使用所提供之代表作業的工作,初始化 ValueTask 類別的新執行個體。

屬性

CompletedTask

取得已成功完成的工作。

IsCanceled

取得值,指出這個物件是否代表已取消的作業。

IsCompleted

取得值,指出這個物件是否代表已完成的作業。

IsCompletedSuccessfully

取得值,指出這個物件是否代表已成功完成的作業。

IsFaulted

取得值,指出這個物件是否代表失敗的作業。

方法

AsTask()

擷取代表這個 ValueTaskTask 物件。

ConfigureAwait(Boolean)

設定此值的 awaiter。

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()

建立此值的 awaiter。

GetHashCode()

傳回這個執行個體的雜湊碼。

Preserve()

取得未來可以隨時使用的 ValueTask

運算子

Equality(ValueTask, ValueTask)

比較兩個 ValueTask 值是否相等。

Inequality(ValueTask, ValueTask)

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

適用於