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

Definición

Proporciona un tipo de valor que encapsula un Task<TResult> y un TResult(solo se usa uno de ellos).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))

Parámetros de tipo

TResult

Resultado.The result.

Herencia
ValueTask<TResult>ValueTask<TResult>ValueTask<TResult>ValueTask<TResult>
Implementaciones
IEquatable<ValueTask<TResult>>

Comentarios

Una ValueTask<TResult> instancia se puede esperar o convertir Task<TResult> en mediante AsTask.A ValueTask<TResult> instance may either be awaited or converted to a Task<TResult> using AsTask. Una ValueTask<TResult> instancia solo se puede esperar una vez y los consumidores no pueden llamar GetAwaiter() hasta que la instancia se ha completado.A ValueTask<TResult> instance may only be awaited once, and consumers may not call GetAwaiter() until the instance has completed. Si estas limitaciones son inaceptables, ValueTask<TResult> convierta Task<TResult> el en AsTaskun llamando a.If these limitations are unacceptable, convert the ValueTask<TResult> to a Task<TResult> by calling AsTask.

Las siguientes operaciones no deben realizarse nunca en ValueTask<TResult> una instancia de:The following operations should never be performed on a ValueTask<TResult> instance:

  • Esperando la instancia varias veces.Awaiting the instance multiple times.
  • Llamada AsTask varias veces.Calling AsTask multiple times.
  • Usar .Result o.GetAwaiter().GetResult() cuando la operación aún no se ha completado o utilizarla varias veces.Using .Result or .GetAwaiter().GetResult() when the operation hasn't yet completed, or using them multiple times.
  • Usar más de una de estas técnicas para consumir la instancia.Using more than one of these techniques to consume the instance.

Si realiza alguna de las anteriores, los resultados son indefinidos.If you do any of the above, the results are undefined.

Un método puede devolver una instancia de este tipo de valor cuando es probable que el resultado de su operación esté disponible de forma sincrónica y cuando se espera que se invoque con tanta frecuencia que el costo de asignar un nuevo Task<TResult> para cada llamada sea prohibitiva.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.

Hay ventajas en el ValueTask<TResult> uso Task<TResult>de en lugar de.There are tradeoffs to using a ValueTask<TResult> instead of a Task<TResult>. Por ejemplo, mientras ValueTask<TResult> que puede ayudar a evitar una asignación en el caso de que el resultado correcto esté disponible sincrónicamente, también contiene varios campos, mientras que un Task<TResult> como un tipo de referencia es un campo único.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. Esto significa que si se ValueTask<TResult> devuelve un a partir de un método, se copian más datos.This means that returning a ValueTask<TResult> from a method results in copying more data. También significa que, si un método que devuelve un ValueTask<TResult> se espera en un método asincrónico, el equipo de estado para ese método asincrónico será mayor, porque debe almacenar un struct que contenga varios campos en lugar de una sola referencia.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.

En el caso de usos que no sean el resultado de una operación asincrónica mediante Await ValueTask<TResult> , puede dar lugar a un modelo de programación más complicado que requiera más asignaciones.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. Por ejemplo, considere un método que podría devolver un Task<TResult> con una tarea almacenada en caché como un resultado común ValueTask<TResult>o.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 el consumidor del resultado desea usarlo como Task<TResult> en un método como WhenAll o WhenAny Task<TResult> , primero se debe convertir en ValueTask<TResult> mediante AsTask, lo que conduce a una asignación que se habría evitado si Task<TResult> en la memoria caché se usaba en primer lugar.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.

Como tal, la opción predeterminada para cualquier método asincrónico debe ser devolver Task o. Task<TResult>As such, the default choice for any asynchronous method should be to return a Task or Task<TResult>. Solo si el análisis de rendimiento demuestra que merece ValueTask<TResult> la pena usar en lugar de Task<TResult>un.Only if performance analysis proves it worthwhile should a ValueTask<TResult> be used instead of a Task<TResult>. La versión no genérica de ValueTask no se recomienda para la mayoría de los escenarios.The non generic version of ValueTask is not recommended for most scenarios. La CompletedTask propiedad se debe usar para revertir un singleton completado correctamente en caso de que un método que Task devuelva se complete de forma sincrónica y correcta.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.

Nota

El uso del ValueTask<TResult> tipo se admite a C# partir de 7,0 y no es compatible con ninguna versión 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.

Constructores

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

Inicializa una nueva instancia de la clase ValueTask<TResult> usando la tarea suministrada que representa la operación.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)

Inicializa una nueva instancia de la clase ValueTask<TResult> usando el resultado suministrado de una operación realizada correctamente.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)

Inicializa una nueva instancia de la clase ValueTask<TResult> con un objeto IValueTaskSource<TResult> que representa la operación.Initializes a new instance of the ValueTask<TResult> class with a IValueTaskSource<TResult> object that represents the operation.

Propiedades

IsCanceled IsCanceled IsCanceled IsCanceled

Obtiene un valor que indica si este objeto representa una operación cancelada.Gets a value that indicates whether this object represents a canceled operation.

IsCompleted IsCompleted IsCompleted IsCompleted

Obtiene un valor que indica si este objeto representa una operación completada.Gets a value that indicates whether this object represents a completed operation.

IsCompletedSuccessfully IsCompletedSuccessfully IsCompletedSuccessfully IsCompletedSuccessfully

Obtiene un valor que indica si este objeto representa una operación completada correctamente.Gets a value that indicates whether this object represents a successfully completed operation.

IsFaulted IsFaulted IsFaulted IsFaulted

Obtiene un valor que indica si este objeto representa una operación con error.Gets a value that indicates whether this object represents a failed operation.

Result Result Result Result

Obtiene el resultado.Gets the result.

Métodos

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

Recupera un objeto Task<TResult> que representa este ValueTask<TResult>.Retrieves a Task<TResult> object that represents this ValueTask<TResult>.

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

Configura un elemento que ejecuta await para este valor.Configures an awaiter for this value.

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

Crea un generador de método para usarlo con un método asincrónico.Creates a method builder for use with an async method.

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

Determina si el objeto especificado es igual al objeto actual.Determines whether the specified object is equal to the current object.

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

Determina si el objeto ValueTask<TResult> especificado es igual al objeto ValueTask<TResult> actual.Determines whether the specified ValueTask<TResult> object is equal to the current ValueTask<TResult> object.

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

Crea un objeto que ejecuta await para este objeto awaitable.Creates an awaiter for this value.

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

Devuelve el código hash de esta instancia.Returns the hash code for this instance.

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

Obtiene un ValueTask<TResult> que se puede usar en cualquier momento en el futuro.Gets a ValueTask<TResult> that may be used at any point in the future.

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

Devuelve una cadena que representa el objeto actual.Returns a string that represents the current object.

Operadores

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

Compara dos valores para determinar si son iguales.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>)

Determina si dos valores ValueTask<TResult> son desiguales.Determines whether two ValueTask<TResult> values are unequal.

Se aplica a