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 實例可以被等待,也可以被轉換成 Task 使用 AsTask。 一個 ValueTask 實例只能等待一次,消費者在實例完成前不得撥打 GetAwaiter() 電話。 若這些限制無法接受,則透過呼叫 AsTask將 ValueTask 轉換為 。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() | |
| ConfigureAwait(Boolean) |
為此值配置等待器。 |
| Equals(Object) |
判斷指定物件是否等於當前 ValueTask 實例。 |
| Equals(ValueTask) | |
| GetAwaiter() |
這會創造一個等待這個價值的玩家。 |
| GetHashCode() |
傳回這個實例的哈希碼。 |
| Preserve() |
拿到 ValueTask 一個未來隨時可能使用的。 |
操作員
| 名稱 | Description |
|---|---|
| Equality(ValueTask, ValueTask) |
比較兩個 ValueTask 平等的價值。 |
| Inequality(ValueTask, ValueTask) |
判斷兩個 ValueTask 值是否不相等。 |