ValueTask<TResult> Structure

Définition

Fournit un type valeur qui inclut dans un wrapper un Task<TResult> et un TResult, un seul d’entre eux étant utilisé.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))

Paramètres de type

TResult

Résultat.The result.

Héritage
ValueTask<TResult>
Implémente
IEquatable<ValueTask<TResult>>

Remarques

Une ValueTask<TResult> instance peut être attendue ou convertie Task<TResult> en using AsTask.A ValueTask<TResult> instance may either be awaited or converted to a Task<TResult> using AsTask. Une ValueTask<TResult> instance ne peut être attendue qu’une seule fois, et les GetAwaiter() consommateurs peuvent ne pas appeler tant que l’instance n’est pas terminée.A ValueTask<TResult> instance may only be awaited once, and consumers may not call GetAwaiter() until the instance has completed. Si ces limitations ne sont pas acceptables ValueTask<TResult> , convertissez le AsTask Task<TResult> en en appelant.If these limitations are unacceptable, convert the ValueTask<TResult> to a Task<TResult> by calling AsTask.

Les opérations suivantes ne doivent jamais être effectuées sur ValueTask<TResult> une instance:The following operations should never be performed on a ValueTask<TResult> instance:

  • Attente répétée de l’instance.Awaiting the instance multiple times.
  • Appel AsTask à plusieurs fois.Calling AsTask multiple times.
  • À .Result l' .GetAwaiter().GetResult() aide de ou lorsque l’opération n’est pas encore terminée, ou à l’aide de plusieurs fois.Using .Result or .GetAwaiter().GetResult() when the operation hasn't yet completed, or using them multiple times.
  • Utilisation de plusieurs de ces techniques pour consommer l’instance.Using more than one of these techniques to consume the instance.

Si vous effectuez l’une des actions ci-dessus, les résultats ne sont pas définis.If you do any of the above, the results are undefined.

Une méthode peut retourner une instance de ce type valeur lorsqu’il est probable que le résultat de son opération sera disponible de façon synchrone, et lorsqu’elle est censée être appelée, si souvent que le coût de l’allocation d' Task<TResult> un nouveau pour chaque appel sera prohibitif.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.

Il existe des compromis à l’utilisation ValueTask<TResult> d’un au Task<TResult>lieu d’un.There are tradeoffs to using a ValueTask<TResult> instead of a Task<TResult>. Par exemple, alors qu' ValueTask<TResult> un peut aider à éviter une allocation dans le cas où le résultat réussi est disponible de façon synchrone, il contient également plusieurs champs Task<TResult> , tandis qu’un type de référence est un champ unique.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. Cela signifie que le retour ValueTask<TResult> d’un à partir d’une méthode entraîne la copie de plus de données.This means that returning a ValueTask<TResult> from a method results in copying more data. Cela signifie également que si une méthode qui retourne un ValueTask<TResult> est attendue dans une méthode Async, l’ordinateur d’État pour cette méthode Async sera plus grand, car il doit stocker un struct contenant plusieurs champs au lieu d’une référence unique.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.

Pour les utilisations autres que la consommation du résultat d’une opération asynchrone utilisant await ValueTask<TResult> , peut conduire à un modèle de programmation plus compliqué qui nécessite plus d’allocations.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. Par exemple, considérez une méthode qui peut retourner un Task<TResult> avec une tâche mise en cache en tant que résultat courant ValueTask<TResult>ou.For example, consider a method that could return either a Task<TResult> with a cached task as a common result or a ValueTask<TResult>. Si le consommateur du résultat souhaite l’utiliser comme un Task<TResult> dans une méthode comme WhenAll ou WhenAny, le ValueTask<TResult> doit d’abord être converti en un Task<TResult> à l' AsTaskaide de, ce qui aboutit à une allocation qui aurait été évitée si un mis en cache a été utilisé en premier lieu. Task<TResult>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.

Par conséquent, le choix par défaut pour toute méthode asynchrone doit être de retourner Task un Task<TResult>ou un.As such, the default choice for any asynchronous method should be to return a Task or Task<TResult>. La ValueTask<TResult> seule façon d’utiliser l’analyse des performances est qu’elle peut être Task<TResult>utilisée à la place d’un.Only if performance analysis proves it worthwhile should a ValueTask<TResult> be used instead of a Task<TResult>. La version non générique de ValueTask n’est pas recommandée pour la plupart des scénarios.The non generic version of ValueTask is not recommended for most scenarios. La CompletedTask propriété doit être utilisée pour remettre à la main un singleton correctement effectué dans le cas où une méthode Task retournant un se termine de façon synchrone et réussie.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.

Notes

L’utilisation du ValueTask<TResult> type est prise en charge à C# partir de 7,0 et n’est prise en charge par aucune version de 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.

Constructeurs

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

Initialise une nouvelle instance de la classe ValueTask<TResult> avec un objet IValueTaskSource<TResult> qui représente l’opération.Initializes a new instance of the ValueTask<TResult> class with a IValueTaskSource<TResult> object that represents the operation.

ValueTask<TResult>(Task<TResult>)

Initialise une nouvelle instance de la classe ValueTask<TResult> en utilisant la tâche fournie qui représente l’opération.Initializes a new instance of the ValueTask<TResult> class using the supplied task that represents the operation.

ValueTask<TResult>(TResult)

Initialise une nouvelle instance de la classe ValueTask<TResult> en utilisant le résultat fourni d’une opération ayant réussi.Initializes a new instance of the ValueTask<TResult> class using the supplied result of a successful operation.

Propriétés

IsCanceled

Obtient une valeur qui indique si cet objet représente une opération annulée.Gets a value that indicates whether this object represents a canceled operation.

IsCompleted

Obtient une valeur qui indique si cet objet représente une opération accomplie.Gets a value that indicates whether this object represents a completed operation.

IsCompletedSuccessfully

Obtient une valeur qui indique si cet objet représente une opération réussie.Gets a value that indicates whether this object represents a successfully completed operation.

IsFaulted

Obtient une valeur qui indique si cet objet représente une opération ayant échoué.Gets a value that indicates whether this object represents a failed operation.

Result

Obtient le résultat.Gets the result.

Méthodes

AsTask()

Récupère un objet Task<TResult> qui représente ce ValueTask<TResult>.Retrieves a Task<TResult> object that represents this ValueTask<TResult>.

ConfigureAwait(Boolean)

Configure un awaiter pour cette valeur.Configures an awaiter for this value.

CreateAsyncMethodBuilder()

Crée un générateur de méthode à utiliser avec une méthode async.Creates a method builder for use with an async method.

Equals(Object)

Détermine si l'objet spécifié est identique à l'objet actuel.Determines whether the specified object is equal to the current object.

Equals(ValueTask<TResult>)

Détermine si l'objet ValueTask<TResult> spécifié est égal à l'objet ValueTask<TResult> en cours.Determines whether the specified ValueTask<TResult> object is equal to the current ValueTask<TResult> object.

GetAwaiter()

Crée un awaiter pour cette valeur.Creates an awaiter for this value.

GetHashCode()

Retourne le code de hachage de cette instance.Returns the hash code for this instance.

Preserve()

Obtient un ValueTask<TResult> qui peut être utilisé à tout moment dans le futur.Gets a ValueTask<TResult> that may be used at any point in the future.

ToString()

Retourne une chaîne qui représente l'objet actuel.Returns a string that represents the current object.

Opérateurs

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

Compare si deux valeurs sont égales.Compares two values for equality.

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

Détermine si deux valeurs ValueTask<TResult> sont inégales.Determines whether two ValueTask<TResult> values are unequal.

S’applique à