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

Definition

Liefert einen Werttyp, der ein Task<TResult> und ein TResult umschließt, von denen nur einer verwendet wird.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))

Typparameter

TResult

Das Ergebnis.The result.

Vererbung
ValueTask<TResult>ValueTask<TResult>ValueTask<TResult>ValueTask<TResult>
Implementiert
IEquatable<ValueTask<TResult>>

Hinweise

Eine Methode kann eine Instanz dieses Werttyps, wenn es wahrscheinlich, dass das Ergebnis des Vorgangs synchron werden, und wenn sein soll aufgerufen so häufig, die die Kosten für das Zuordnen eines neuen zurückgeben Task<TResult> für jeden Aufruf unerschwinglich werden.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.

Werden mit einem ValueTask<TResult> statt einer Task<TResult>.There are tradeoffs to using a ValueTask<TResult> instead of a Task<TResult>. Während beispielsweise ein ValueTask<TResult> können eine Zuordnung in die Groß-/Kleinschreibung zu vermeiden, in dem das erfolgreiche Ergebnis verfügbar synchron ist, sondern auch zwei Felder, während eine Task<TResult> als Verweis-Typ ist ein einzelnes Feld.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. Dies bedeutet, dass der Aufruf einer Methode gibt zwei Felder sollten Daten statt, die mehr Daten zu kopieren.This means that a method call returns two fields worth of data instead of one, which is more data to copy. Bedeutet auch, wenn eine Methode, die gibt eine ValueTask<TResult> erwartet innerhalb einer Async-Methode der Zustandsautomat für diese asynchrone Methode größer, ausgeführt wird, weil eine Struktur mit zwei Feldern anstelle eines einzelnen Verweises gespeichert werden müssen.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.

Für verwendet, als Sie nutzen das Ergebnis eines asynchronen Vorgangs mithilfe "await", ValueTask<TResult> kann zu einem komplizierteren Programmiermodell, das erfordert mehr Zuordnungen führen.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. Betrachten Sie beispielsweise eine Methode, die entweder zurückgeben kann eine Task<TResult> mit eine zwischengespeicherte Aufgabe als ein Ergebnis gemeinsam oder 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>. Wenn der Consumer des Ergebnisses als verwenden möchte eine Task<TResult> in einer Methode wie WhenAll oder WhenAny, wird die ValueTask<TResult> muss zuerst in konvertiert werden eine Task<TResult> mit AsTask, wodurch eine Zuordnung, die wenn vermieden eine zwischengespeicherte Task<TResult> im vornherein verwendet worden.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.

Daher muss die Standardauswahl für eine asynchrone Methode zum Zurückgeben einer Task oder Task<TResult>.As such, the default choice for any asynchronous method should be to return a Task or Task<TResult>. Sollte nur dann, wenn Informationen zur Leistungsanalyse sich lohnt sich heraus, dass eine ValueTask<TResult> anstelle von einem Task<TResult>.Only if performance analysis proves it worthwhile should a ValueTask<TResult> be used instead of a Task<TResult>. Die nicht generische Version der ValueTask wird nicht für die meisten Szenarien empfohlen.The non generic version of ValueTask is not recommended for most scenarios. Die CompletedTask Eigenschaft sollte verwendet werden, um einen erfolgreich abgeschlossenen Singleton in die Groß-/Kleinschreibung wieder zu übergeben, bei einer Methode zurückgeben einer Task abgeschlossen wurde, synchron und erfolgreich.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.

Hinweis

Die Verwendung der ValueTask<TResult> Typ wird unterstützt, beginnend mit C# 7.0, und wird von allen Versionen von Visual Basic nicht unterstützt.The use of the ValueTask<TResult> type is supported starting with C# 7.0, and is not supported by any version of Visual Basic.

Konstruktoren

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

Initialisiert eine neue Instanz der ValueTask<TResult>-Klasse unter Verwendung des angegebenen Tasks, der den Vorgang darstellt.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)

Initialisiert eine neue Instanz der ValueTask<TResult>-Klasse unter Verwendung des von einem erfolgreichen Vorgang zurückgegebenen Ergebnisses.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)

Eigenschaften

IsCanceled IsCanceled IsCanceled IsCanceled

Ruft einen Wert ab, der angibt, ob dieses Objekt einen abgebrochenen Vorgang darstellt.Gets a value that indicates whether this object represents a canceled operation.

IsCompleted IsCompleted IsCompleted IsCompleted

Ruft einen Wert ab, der angibt, ob dieses Objekt einen abgeschlossenen Vorgang darstellt.Gets a value that indicates whether this object represents a completed operation.

IsCompletedSuccessfully IsCompletedSuccessfully IsCompletedSuccessfully IsCompletedSuccessfully

Ruft einen Wert ab, der angibt, ob dieses Objekt einen erfolgreich abgeschlossenen Vorgang darstellt.Gets a value that indicates whether this object represents a successfully completed operation.

IsFaulted IsFaulted IsFaulted IsFaulted

Ruft einen Wert ab, der angibt, ob dieses Objekt einen fehlgeschlagenen Vorgang darstellt.Gets a value that indicates whether this object represents a failed operation.

Result Result Result Result

Ruft das Ergebnis ab.Gets the result.

Methoden

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

Ruft ein Task<TResult>-Objekt ab, das dieses ValueTask<TResult> darstellt.Retrieves a Task<TResult> object that represents this ValueTask<TResult>.

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

Konfiguriert ein „awaiter“-Element für diesen Wert.Configures an awaiter for this value.

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

Erstellt einen Methodengenerator für die Verwendung mit einer asynchronen Methode.Creates a method builder for use with an async method.

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

Bestimmt, ob das angegebene Objekt mit dem aktuellen Objekt identisch ist.Determines whether the specified object is equal to the current object.

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

Bestimmt, ob das angegebene ValueTask<TResult>-Objekt mit dem aktuellen ValueTask<TResult>-Objekt identisch ist.Determines whether the specified ValueTask<TResult> object is equal to the current ValueTask<TResult> object.

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

Erstellt ein „awaiter“-Element für diesen Wert.Creates an awaiter for this value.

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

Gibt den Hashcode für diese Instanz zurück.Returns the hash code for this instance.

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

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.Returns a string that represents the current object.

Operatoren

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

Überprüft zwei Werte auf Gleichheit.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>)

Bestimmt, ob zwei ValueTask<TResult>-Werte ungleich sind.Determines whether two ValueTask<TResult> values are unequal.

Gilt für: