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

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>ValueTask<TResult>ValueTask<TResult>ValueTask<TResult>
Implémente
IEquatable<ValueTask<TResult>>

Remarques

Un ValueTask<TResult> instance peut être attendue ou convertie en un Task<TResult> à l’aide de AsTask.A ValueTask<TResult> instance may either be awaited or converted to a Task<TResult> using AsTask. Un ValueTask<TResult> instance peut uniquement être attendue qu’une seule fois, et les consommateurs ne peuvent pas appeler GetAwaiter() jusqu'à ce que l’instance est 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 sont inacceptables, convertissez le ValueTask<TResult> à un Task<TResult> en appelant AsTask.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 un ValueTask<TResult> instance :The following operations should never be performed on a ValueTask<TResult> instance:

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

Si vous procédez à un des éléments ci-dessus, les résultats sont indéfinis.If you do any of the above, the results are undefined.

Une méthode peut retourner une instance de ce type de valeur lorsqu’il est probable que le résultat de son fonctionnement sera disponible simultanément, et quand elle devrait être appelée si souvent que d’allouer une nouvelle Task<TResult> 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’aide un ValueTask<TResult> au lieu d’un Task<TResult>.There are tradeoffs to using a ValueTask<TResult> instead of a Task<TResult>. Par exemple, alors qu’un ValueTask<TResult> peut aider à éviter une allocation dans le cas où le résultat de réussite est disponible simultanément, il contient également deux champs, tandis qu’un Task<TResult> comme une référence de type 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 two fields, whereas a Task<TResult> as a reference type is a single field. Cela signifie qu’un appel de méthode retourne deux champs important de données au lieu d’un, qui est plus de données à copier.This means that a method call returns two fields worth of data instead of one, which is more data to copy. Il signifie également que si une méthode qui retourne un ValueTask<TResult> est attendue au sein d’une méthode async, l’ordinateur d’état pour cette méthode async sera plus importante, car elle doit stocker un struct qui contient deux 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 two fields instead of a single reference.

Pour les utilisations autre que consomme le résultat d’une opération asynchrone à l’aide await, ValueTask<TResult> peut entraîner un modèle de programmation plus complexe 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, supposons une méthode qui peut retourner un Task<TResult> avec une tâche de mise en cache comme un résultat commun ou un 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>. Si le consommateur du résultat souhaite l’utiliser comme un Task<TResult> dans une méthode comme WhenAll ou WhenAny, la ValueTask<TResult> doit tout d’abord être converti en un Task<TResult> à l’aide de AsTask, ce qui entraîne une allocation d’espace qui auraient pu être évités si une mise en cache Task<TResult> avait été utilisé en premier lieu.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, il doit être le choix par défaut pour n’importe quelle méthode asynchrone pour retourner un Task ou Task<TResult>.As such, the default choice for any asynchronous method should be to return a Task or Task<TResult>. Uniquement si l’analyse des performances prouve utile doit un ValueTask<TResult> plutôt qu’un Task<TResult>.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é pour la plupart des scénarios.The non generic version of ValueTask is not recommended for most scenarios. Le CompletedTask propriété doit être utilisée pour transmettre un singleton terminé avec succès dans le cas où une méthode retournant un Task se termine de façon synchrone et avec succès.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 de la ValueTask<TResult> type est pris en charge en commençant par C# 7.0 et n’est pas pris en charge par n’importe quelle 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>(Task<TResult>) ValueTask<TResult>(Task<TResult>) ValueTask<TResult>(Task<TResult>) 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) ValueTask<TResult>(TResult) ValueTask<TResult>(TResult) 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.

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

Propriétés

IsCanceled IsCanceled IsCanceled 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 IsCompleted IsCompleted 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 IsCompletedSuccessfully IsCompletedSuccessfully 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 IsFaulted IsFaulted 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 Result Result Result

Obtient le résultat.Gets the result.

Méthodes

AsTask() AsTask() AsTask() 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) ConfigureAwait(Boolean) ConfigureAwait(Boolean) ConfigureAwait(Boolean)

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

CreateAsyncMethodBuilder() CreateAsyncMethodBuilder() CreateAsyncMethodBuilder() 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) Equals(Object) Equals(Object) 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>) Equals(ValueTask<TResult>) Equals(ValueTask<TResult>) 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() GetAwaiter() GetAwaiter() GetAwaiter()

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

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

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

Preserve() Preserve() Preserve() Preserve()
ToString() ToString() ToString() 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>) Equality(ValueTask<TResult>, ValueTask<TResult>) Equality(ValueTask<TResult>, ValueTask<TResult>) Equality(ValueTask<TResult>, ValueTask<TResult>)

Compare si deux valeurs sont égales.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>)

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

S’applique à