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

Definicja

Zawiera typ wartości, która otacza Task<TResult> i TResult, tylko jednego elementu, który jest używany.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

Wynik.The result.

Dziedziczenie
ValueTask<TResult>ValueTask<TResult>ValueTask<TResult>ValueTask<TResult>
Implementuje
IEquatable<ValueTask<TResult>>

Uwagi

Metoda może zwrócić wystąpienia tego typu wartości, gdy istnieje prawdopodobieństwo, że wynik jej działania będą dostępne synchronicznie, a kiedy oczekiwać, że można wywołać tak często, koszt alokowanie nowej Task<TResult> dla każdego wywołania będą wysokie.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.

Dostępne są wady i zalety przy użyciu ValueTask<TResult> zamiast Task<TResult>.There are tradeoffs to using a ValueTask<TResult> instead of a Task<TResult>. Na przykład ValueTask<TResult> może pomóc uniknąć alokacji w przypadku, gdy pomyślnego wyniku jest dostępna synchronicznie, także program zawiera dwa pola, natomiast Task<TResult> jako odwołanie typu jest 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 two fields, whereas a Task<TResult> as a reference type is a single field. Oznacza to, że wywołanie metody zwraca dwa pola wartości danych zamiast jednego, czyli większej ilości danych do skopiowania.This means that a method call returns two fields worth of data instead of one, which is more data to copy. Oznacza to również, że jeśli metoda, która zwraca ValueTask<TResult> jest oczekiwane w metodzie asynchronicznej automatu stanów dla tej metody asynchronicznej jest większy, ponieważ muszą być przechowywane struktury zawierający dwa pola, a nie jedno odwołanie.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 two fields instead of a single reference.

Dla używa innej niż korzystanie z wyniku operacji asynchronicznych za pomocą await, ValueTask<TResult> może prowadzić do bardziej zawiłe modelu programowania, który wymaga więcej alokacji.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. Rozważmy na przykład metoda, która może zwracać albo Task<TResult> z pamięci podręcznej zadaniem typowych wyniku lub ValueTask<TResult>.For example, consider a method that could return either a Task<TResult> with a cached task as a common result or a ValueTask<TResult>. Jeśli konsument wynik chce używać go jako Task<TResult> w metodzie, takie jak WhenAll lub WhenAny, ValueTask<TResult> najpierw musi zostać skonwertowany do Task<TResult> przy użyciu AsTask, prowadzącego do alokacji, który będzie uniknąć, jeśli buforowane Task<TResult> została wykorzystana w pierwszej kolejności.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 takie, wybór domyślny dla dowolnej metody asynchronicznej należy zwrócić Task lub Task<TResult>.As such, the default choice for any asynchronous method should be to return a Task or Task<TResult>. Należy tylko wtedy, gdy analiza wydajności jest cenna ValueTask<TResult> można używać zamiast Task<TResult>.Only if performance analysis proves it worthwhile should a ValueTask<TResult> be used instead of a Task<TResult>. Ogólny niż wersja ValueTask nie jest zalecane w przypadku większości scenariuszy.The non generic version of ValueTask is not recommended for most scenarios. CompletedTask Właściwość powinna być używana do przekazania z powrotem pomyślnie ukończono pojedynczego wystąpienia w przypadku których zwracania metody Task ukończy synchronicznie i pomyślnie.The 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.

Uwaga

Korzystanie z ValueTask<TResult> typ jest obsługiwany, począwszy od C# 7.0, a nie jest obsługiwane przez dowolną wersję języka 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>)

Inicjuje nowe wystąpienie klasy ValueTask<TResult> przy użyciu podanej zadanie, które reprezentuje operację.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)

Inicjuje nowe wystąpienie klasy ValueTask<TResult> przy użyciu podanej wynik pomyślnego uruchomienia operacji.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)

Właściwości

IsCanceled IsCanceled IsCanceled IsCanceled

Pobiera wartość wskazującą, czy ten obiekt reprezentuje anulowanych operacji.Gets a value that indicates whether this object represents a canceled operation.

IsCompleted IsCompleted IsCompleted IsCompleted

Pobiera wartość wskazującą, czy ten obiekt reprezentuje ukończoną operację.Gets a value that indicates whether this object represents a completed operation.

IsCompletedSuccessfully IsCompletedSuccessfully IsCompletedSuccessfully IsCompletedSuccessfully

Pobiera wartość wskazującą, czy ten obiekt reprezentuje pomyślnie Ukończono operację.Gets a value that indicates whether this object represents a successfully completed operation.

IsFaulted IsFaulted IsFaulted IsFaulted

Pobiera wartość wskazującą, czy ten obiekt reprezentuje operację zakończoną niepowodzeniem.Gets a value that indicates whether this object represents a failed operation.

Result Result Result Result

Pobiera wynik.Gets the result.

Metody

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

Pobiera Task<TResult> obiekt, który reprezentuje to ValueTask<TResult>.Retrieves a Task<TResult> object that represents this ValueTask<TResult>.

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

Konfiguruje awaiter dla tej wartości.Configures an awaiter for this value.

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

Tworzy konstruktora metoda do użycia z metody asynchronicznej.Creates a method builder for use with an async method.

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

Określa, czy określony obiekt jest równy bieżącemu obiektowi.Determines whether the specified object is equal to the current object.

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

Określa, czy określony ValueTask<TResult> obiekt jest taki sam do bieżącego ValueTask<TResult> obiektu.Determines whether the specified ValueTask<TResult> object is equal to the current ValueTask<TResult> object.

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

Tworzy awaiter dla tej wartości.Creates an awaiter for this value.

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

Zwraca kod skrótu dla tego wystąpienia.Returns the hash code for this instance.

Preserve() Preserve() Preserve() Preserve()
ToString() ToString() ToString() ToString()

Zwraca ciąg, który reprezentuje bieżący obiekt.Returns a string that represents the current object.

Operatory

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

Porównuje dwie wartości pod kątem równości.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>)

Określa, czy dwa ValueTask<TResult> wartości są nierówne.Determines whether two ValueTask<TResult> values are unequal.

Dotyczy