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)
建立的實例, (零初始化的結構) 表示同步、成功完成的作業。
Value |
使用所提供的 IValueTaskSource 物件 (代表作業),初始化 ValueTask 類別的新執行個體。 |
Value |
使用所提供之代表作業的工作,初始化 ValueTask 類別的新執行個體。 |
Completed |
取得已成功完成的工作。 |
Is |
取得值,指出這個物件是否代表已取消的作業。 |
Is |
取得值,指出這個物件是否代表已完成的作業。 |
Is |
取得值,指出這個物件是否代表已成功完成的作業。 |
Is |
取得值,指出這個物件是否代表失敗的作業。 |
As |
|
Configure |
設定此值的 awaiter。 |
Equals(Object) |
判斷指定的物件和目前的 ValueTask 執行個體是否相等。 |
Equals(Value |
|
From |
建立 ValueTask,其已因為使用指定的取消語彙基元取消而完成。 |
From |
建立 ValueTask<TResult>,其已因為使用指定的取消語彙基元取消而完成。 |
From |
建立 ValueTask,其已完成但具有指定的例外狀況。 |
From |
建立 ValueTask<TResult>,其已完成但具有指定的例外狀況。 |
From |
建立已成功完成具有指定之結果的 ValueTask<TResult>。 |
Get |
建立此值的 awaiter。 |
Get |
傳回這個執行個體的雜湊碼。 |
Preserve() |
取得未來可以隨時使用的 ValueTask。 |
Equality(Value |
比較兩個 ValueTask 值是否相等。 |
Inequality(Value |
判斷兩個 ValueTask 值是否不相等。 |
產品 | 版本 |
---|---|
.NET | Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10 |
.NET Standard | 2.0 (package-provided), 2.1 |