ValueTask 結構
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
提供非同步作業的可等候結果。
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
實例可以使用 等候或轉換成 TaskAsTask 。
ValueTask
實例只能等候一次,而且取用者在實例完成之前可能不會呼叫 GetAwaiter() 。 如果無法接受這些限制,請呼叫 AsTask 將 ValueTask
Task 轉換為 。
在 實例上 ValueTask
不應執行下列作業:
- 等候實例多次。
- 多次呼叫 AsTask 。
- 使用其中一種以上的技術來取用 實例。
如果您執行上述任一動作,則結果未定義。
ValueTask
是可以包裝 Task 或 IValueTaskSource 實例的結構。 從非同步方法傳 ValueTask
IValueTaskSource 回包裝實例的 ,可讓高輸送量應用程式使用可重複使用 IValueTaskSource 的物件集區來避免配置。 如需詳細資訊,請參閱 瞭解 ValueTask 的原因、內容及時機。
ValueTask
使用 而不是 Task ,會產生一些額外負荷。 因為 ValueTask
是具有多個欄位的結構,所以從 方法傳回它會導致相較于傳回單 Task 一參考而複製更多資料。 因此,任何未傳回結果的非同步方法的預設選擇應該是傳回 Task 。 只有在效能分析證明應該使用 而不是 時,才值得 ValueTask
使用 Task 。
Task.CompletedTask當方法傳回同步且順利完成時,應該使用 屬性來傳回成功完成的單一 Task 。
注意
從 C# 7.0 開始,支援使用 ValueTask
類型,且不受任何 Visual Basic 版本支援。
注意
使用無參數建構函式或語法 default(ValueTask)
建立的實例, (零初始化的結構) 表示同步、成功完成的作業。
建構函式
ValueTask(IValueTaskSource, Int16) |
使用所提供的 IValueTaskSource 物件 (代表作業),初始化 ValueTask 類別的新執行個體。 |
ValueTask(Task) |
使用所提供之代表作業的工作,初始化 ValueTask 類別的新執行個體。 |
屬性
CompletedTask |
取得已成功完成的工作。 |
IsCanceled |
取得值,指出這個物件是否代表已取消的作業。 |
IsCompleted |
取得值,指出這個物件是否代表已完成的作業。 |
IsCompletedSuccessfully |
取得值,指出這個物件是否代表已成功完成的作業。 |
IsFaulted |
取得值,指出這個物件是否代表失敗的作業。 |
方法
AsTask() | |
ConfigureAwait(Boolean) |
設定此值的 awaiter。 |
Equals(Object) |
判斷指定的物件和目前的 ValueTask 執行個體是否相等。 |
Equals(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 值是否不相等。 |