ValueTask<TResult> ValueTask<TResult> ValueTask<TResult> ValueTask<TResult> Struct

Definice

Poskytuje hodnotový typ, který zabalí Task<TResult> TResulta a, pouze jeden z nich je použit.Provides a value type that wraps a Task<TResult> and a TResult, only one of which is used.

generic <typename TResult>
public value class ValueTask : 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.The result.

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

Poznámky

Instance může být buď očekávána, nebo převedena Task<TResult> na pomocí AsTask. ValueTask<TResult>A ValueTask<TResult> instance may either be awaited or converted to a Task<TResult> using AsTask. Instance může být očekávána pouze jednou a příjemci mohou volat GetAwaiter() až po dokončení instance. ValueTask<TResult>A ValueTask<TResult> instance may only be awaited once, and consumers may not call GetAwaiter() until the instance has completed. Pokud tato omezení nesouhlasí, převeďte ValueTask<TResult> na a Task<TResult> voláním AsTask.If these limitations are unacceptable, convert the ValueTask<TResult> to a Task<TResult> by calling AsTask.

Následující operace by nikdy neměly být provedeny u ValueTask<TResult> instance:The following operations should never be performed on a ValueTask<TResult> instance:

  • Očekává se instance víckrát.Awaiting the instance multiple times.
  • Volání AsTask je více než jednou.Calling AsTask multiple times.
  • Pomocí .Result nebo.GetAwaiter().GetResult() když operace ještě není dokončená, nebo je použijte víckrát.Using .Result or .GetAwaiter().GetResult() when the operation hasn't yet completed, or using them multiple times.
  • Použití více než jednoho z těchto postupů ke spotřebování instance.Using more than one of these techniques to consume the instance.

Pokud provedete některou z výše uvedených výsledků, výsledky nejsou definovány.If you do any of the above, the results are undefined.

Metoda může vracet instanci tohoto typu hodnoty, pokud je pravděpodobný, že výsledek jeho operace bude k dispozici synchronně a v případě, že se očekává, že budou náklady na přidělení nového Task<TResult> pro každé volání vykazovatelné.A method may return an instance of this value type when it's likely that the result of its operation will be available synchronously, and when it's expected to be invoked so frequently that the cost of allocating a new Task<TResult> for each call will be prohibitive.

Použití a ValueTask<TResult> místo Task<TResult>.There are tradeoffs to using a ValueTask<TResult> instead of a Task<TResult>. Například když ValueTask<TResult> může pomáhat vyhnout se přidělení v případě, že je úspěšný výsledek k dispozici synchronně, obsahuje také více polí, Task<TResult> zatímco jako typ odkazu je jedno pole.For example, while a ValueTask<TResult> can help avoid an allocation in the case where the successful result is available synchronously, it also contains multiple fields, whereas a Task<TResult> as a reference type is a single field. To znamená, že vrácení ValueTask<TResult> z metody vede ke zkopírování dalších dat.This means that returning a ValueTask<TResult> from a method results in copying more data. To také znamená, že pokud metoda, která vrací ValueTask<TResult> výjimku, je očekávána v asynchronní metodě, Stavový počítač pro tuto asynchronní metodu bude větší, protože musí uložit strukturu obsahující více polí namísto jediného odkazu.It also means, that if a method that returns a ValueTask<TResult> is awaited within an async method, the state machine for that async method will be larger, because it must store a struct containing multiple fields instead of a single reference.

Pro použití jiné než zpracování výsledku asynchronní operace pomocí operátoru await ValueTask<TResult> může vést k komplexnějšímu programovacímu modelu, který vyžaduje více přidělení.For uses other than consuming the result of an asynchronous operation using await, ValueTask<TResult> can lead to a more convoluted programming model that requires more allocations. Zvažte například metodu, která by mohla vracet Task<TResult> úlohu s uloženou v mezipaměti jako běžný výsledek ValueTask<TResult>nebo.For example, consider a method that could return either a Task<TResult> with a cached task as a common result or a ValueTask<TResult>. Pokud si příjemce výsledku chce Task<TResult> použít jako v metodě jako WhenAll nebo WhenAny Task<TResult> , ValueTask<TResult> musí být nejprve převeden na použití pomocí AsTask, což vede k přidělení, které by bylo zamezeno, pokud v Task<TResult> prvním místě se použila mezipaměť.If the consumer of the result wants to use it as a Task<TResult> in a method like WhenAll or WhenAny, the ValueTask<TResult> must first be converted to a Task<TResult> using AsTask, leading to an allocation that would have been avoided if a cached Task<TResult> had been used in the first place.

Jako takové je výchozí volba pro jakoukoli asynchronní metodu, aby vracela Task nebo. Task<TResult>As such, the default choice for any asynchronous method should be to return a Task or Task<TResult>. Jenom v případě, že analýza výkonu prokáže, ValueTask<TResult> že by se měla použít Task<TResult>místo.Only if performance analysis proves it worthwhile should a ValueTask<TResult> be used instead of a Task<TResult>. Neobecná verze ValueTask nástroje se pro většinu scénářů nedoporučuje.The non generic version of ValueTask is not recommended for most scenarios. Vlastnost by se měla použít k vrácení úspěšně dokončeného typu Singleton v případě, kdy metoda Task , která provede synchronní a úspěšně se dokončí synchronně. CompletedTaskThe CompletedTask property should be used to hand back a successfully completed singleton in the case where a method returning a Task completes synchronously and successfully.

Poznámka

Použití ValueTask<TResult> typu je podporováno od C# 7,0 a není podporováno žádnou z verzí Visual Basic.The use of the ValueTask<TResult> type is supported starting with C# 7.0, and is not supported by any version of Visual Basic.

Konstruktory

ValueTask<TResult>(Task<TResult>) ValueTask<TResult>(Task<TResult>) ValueTask<TResult>(Task<TResult>) ValueTask<TResult>(Task<TResult>)

Inicializuje novou instanci ValueTask<TResult> třídy pomocí zadaného úkolu, který představuje operaci.Initializes a new instance of the ValueTask<TResult> class using the supplied task that represents the operation.

ValueTask<TResult>(TResult) ValueTask<TResult>(TResult) ValueTask<TResult>(TResult) ValueTask<TResult>(TResult)

Inicializuje novou instanci ValueTask<TResult> třídy pomocí zadaného výsledku úspěšné operace.Initializes a new instance of the ValueTask<TResult> class using the supplied result of a successful operation.

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

Inicializuje novou instanci ValueTask<TResult> třídy IValueTaskSource<TResult> s objektem, který představuje operaci.Initializes a new instance of the ValueTask<TResult> class with a IValueTaskSource<TResult> object that represents the operation.

Vlastnosti

IsCanceled IsCanceled IsCanceled IsCanceled

Získá hodnotu, která označuje, zda tento objekt představuje zrušenou operaci.Gets a value that indicates whether this object represents a canceled operation.

IsCompleted IsCompleted IsCompleted IsCompleted

Získá hodnotu, která označuje, zda tento objekt představuje dokončenou operaci.Gets a value that indicates whether this object represents a completed operation.

IsCompletedSuccessfully IsCompletedSuccessfully IsCompletedSuccessfully IsCompletedSuccessfully

Získá hodnotu, která označuje, zda tento objekt představuje úspěšně dokončenou operaci.Gets a value that indicates whether this object represents a successfully completed operation.

IsFaulted IsFaulted IsFaulted IsFaulted

Získá hodnotu, která označuje, zda tento objekt představuje neúspěšnou operaci.Gets a value that indicates whether this object represents a failed operation.

Result Result Result Result

Získá výsledek.Gets the result.

Metody

AsTask() AsTask() AsTask() AsTask()

Načte objekt, který představuje toto ValueTask<TResult>. Task<TResult>Retrieves a Task<TResult> object that represents this ValueTask<TResult>.

ConfigureAwait(Boolean) ConfigureAwait(Boolean) ConfigureAwait(Boolean) ConfigureAwait(Boolean)

Nakonfiguruje v této hodnotě await.Configures an awaiter for this value.

CreateAsyncMethodBuilder() CreateAsyncMethodBuilder() CreateAsyncMethodBuilder() CreateAsyncMethodBuilder()

Vytvoří Tvůrce metody pro použití s asynchronní metodou.Creates a method builder for use with an async method.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Určuje, zda se zadaný objekt rovná aktuálnímu objektu.Determines whether the specified object is equal to the current object.

Equals(ValueTask<TResult>) Equals(ValueTask<TResult>) Equals(ValueTask<TResult>) Equals(ValueTask<TResult>)

Určuje, zda je ValueTask<TResult> zadaný objekt stejný jako aktuální ValueTask<TResult> objekt.Determines whether the specified ValueTask<TResult> object is equal to the current ValueTask<TResult> object.

GetAwaiter() GetAwaiter() GetAwaiter() GetAwaiter()

Vytvoří pro tuto hodnotu operátor await.Creates an awaiter for this value.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Vrátí kód hash této instance.Returns the hash code for this instance.

Preserve() Preserve() Preserve() Preserve()

ValueTask<TResult> Získá, který může být použit kdykoli v budoucnosti.Gets a ValueTask<TResult> that may be used at any point in the future.

ToString() ToString() ToString() ToString()

Vrací řetězec, který představuje aktuální objekt.Returns a string that represents the current object.

Operátory

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

Porovná dvě hodnoty pro rovnost.Compares two values for equality.

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

Určuje, zda ValueTask<TResult> jsou dvě hodnoty neshodné.Determines whether two ValueTask<TResult> values are unequal.

Platí pro