ValueTask<TResult> Struktura

Definice

Poskytuje typ hodnoty, který zabalí Task<TResult> a a TResult, z nichž se používá pouze jeden.

generic <typename TResult>
public value class ValueTask : IEquatable<System::Threading::Tasks::ValueTask<TResult>>
public readonly struct ValueTask<TResult> : IEquatable<System.Threading.Tasks.ValueTask<TResult>>
public struct ValueTask<TResult> : IEquatable<System.Threading.Tasks.ValueTask<TResult>>
type ValueTask<'Result> = struct
Public Structure ValueTask(Of TResult)
Implements IEquatable(Of ValueTask(Of TResult))

Parametry typu

TResult

Výsledek.

Dědičnost
ValueTask<TResult>
Implementuje
IEquatable<ValueTask<TResult>>

Poznámky

Instance ValueTask<TResult> může být buď očekávána, nebo převedena na Task<TResult> pomocí AsTask. Instance ValueTask<TResult> může být očekávána pouze jednou a příjemci nesmí číst Result , dokud se instance nedokončí. Pokud jsou tato omezení nepřijatelná, převeďte ValueTask<TResult> na a Task<TResult> voláním AsTask.

V instanci by se nikdy neměly provádět ValueTask<TResult> následující operace:

  • Čeká na instanci několikrát.
  • Volání AsTask vícekrát.
  • Použití .Result nebo .GetAwaiter().GetResult() v případě, že se operace ještě nedokončila, nebo je použijte několikrát.
  • Použití více než jedné z těchto technik ke zpracování instance.

Pokud uděláte některou z výše uvedených možností, nebudou výsledky definovány.

Metoda může vrátit instanci tohoto typu hodnoty, pokud je pravděpodobné, že výsledek její operace bude k dispozici synchronně a když se očekává, že bude vyvolána tak často, že náklady na přidělení nového Task<TResult> pro každé volání budou zakázané.

ValueTask<TResult> Použití namísto Task<TResult>. I když ValueTask<TResult> například může pomoct vyhnout se přidělení v případě, že je úspěšný výsledek k dispozici synchronně, obsahuje také více polí, zatímco Task<TResult> jako typ odkazu je jedno pole. To znamená, že vrácení ValueTask<TResult> z metody vede ke zkopírování více dat. To také znamená, že pokud je metoda, která vrací ValueTask<TResult> hodnotu, očekávána v rámci asynchronní metody, bude stavový počítač pro danou asynchronní metodu větší, protože musí místo jediného odkazu ukládat strukturu obsahující více polí.

U jiných použití, než je využití výsledku asynchronní operace pomocí funkce await, ValueTask<TResult> může vést k více konvolutnějšímu programovacímu modelu, který vyžaduje více přidělení. Představte si například metodu, která by mohla jako běžný výsledek vrátit buď Task<TResult> úlohu s mezipamětí, nebo ValueTask<TResult>. Pokud ho příjemce výsledku chce použít jako metodu Task<TResult> , jako WhenAll je nebo WhenAny, ValueTask<TResult> musí být nejprve převedena na Task<TResult> pomocí AsTask, což vede k přidělení, kterému by se vyhýbalo, kdyby se na prvním místě použila Task<TResult> mezipaměť.

Výchozí volbou pro jakoukoli asynchronní metodu by proto mělo být vrácení nebo TaskTask<TResult>. Pouze v případě, že analýza výkonu prokáže, že je vhodné ValueTask<TResult> použít místo Task<TResult>. Pro většinu scénářů se nedoporučuje obecná verze ValueTask nástroje. Vlastnost CompletedTask by měla být použita k předání úspěšně dokončené singleton v případě, že metoda vracející Task dokončení synchronně a úspěšně.

Poznámka

Použití ValueTask<TResult> typu je podporováno počínaje jazykem C# 7.0 a nepodporuje ho žádná verze jazyka Visual Basic.

Poznámka

Instance vytvořená pomocí konstruktoru bez parametrů nebo default(ValueTask<TResult>) syntaxí (nulová inicializovaná struktura) představuje synchronně a úspěšně dokončenou operaci s výsledkem default(TResult).

Konstruktory

ValueTask<TResult>(IValueTaskSource<TResult>, Int16)

Inicializuje novou instanci ValueTask<TResult> třídy s objektem IValueTaskSource<TResult> , který představuje operaci.

ValueTask<TResult>(Task<TResult>)

Inicializuje novou instanci ValueTask<TResult> třídy pomocí zadané úlohy, která představuje operaci.

ValueTask<TResult>(TResult)

Inicializuje novou instanci ValueTask<TResult> třídy pomocí zadaného výsledku úspěšné operace.

Vlastnosti

IsCanceled

Získá hodnotu, která označuje, zda tento objekt představuje zrušenou operaci.

IsCompleted

Získá hodnotu, která označuje, zda tento objekt představuje dokončenou operaci.

IsCompletedSuccessfully

Získá hodnotu, která označuje, zda tento objekt představuje úspěšně dokončenou operaci.

IsFaulted

Získá hodnotu, která označuje, zda tento objekt představuje neúspěšnou operaci.

Result

Získá výsledek.

Metody

AsTask()

Načte Task<TResult> objekt, který představuje tento ValueTask<TResult>objekt .

ConfigureAwait(Boolean)

Nakonfiguruje pro tuto hodnotu vyčkávač.

CreateAsyncMethodBuilder()

Vytvoří tvůrce metod pro použití s asynchronní metodou.

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

Equals(ValueTask<TResult>)

Určuje, zda je zadaný ValueTask<TResult> objekt roven aktuálnímu ValueTask<TResult> objektu.

GetAwaiter()

Vytvoří vyčkávač pro tuto hodnotu.

GetHashCode()

Vrátí hodnotu hash pro tuto instanci.

Preserve()

ValueTask<TResult> Získá, který může být použit v libovolném okamžiku v budoucnosti.

ToString()

Vrátí řetězec, který představuje aktuální objekt.

Operátory

Equality(ValueTask<TResult>, ValueTask<TResult>)

Porovná dvě hodnoty rovnosti.

Inequality(ValueTask<TResult>, ValueTask<TResult>)

Určuje, zda jsou dvě ValueTask<TResult> hodnoty nerovné.

Platí pro