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

Definição

Fornece um tipo de valor que encapsula um Task<TResult> e um TResult. Somente um de cada é usado.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

O resultado.The result.

Herança
ValueTask<TResult>ValueTask<TResult>ValueTask<TResult>ValueTask<TResult>
Implementações
IEquatable<ValueTask<TResult>>

Comentários

Uma ValueTask<TResult> instância pode ser esperada ou convertida em um Task<TResult> usando AsTask.A ValueTask<TResult> instance may either be awaited or converted to a Task<TResult> using AsTask. Uma ValueTask<TResult> instância só pode ser aguardada uma vez e os consumidores podem não GetAwaiter() chamar até que a instância seja concluída.A ValueTask<TResult> instance may only be awaited once, and consumers may not call GetAwaiter() until the instance has completed. Se essas limitações forem inaceitáveis, ValueTask<TResult> Converta Task<TResult> o em AsTaska chamando.If these limitations are unacceptable, convert the ValueTask<TResult> to a Task<TResult> by calling AsTask.

As operações a seguir nunca devem ser executadas em ValueTask<TResult> uma instância do:The following operations should never be performed on a ValueTask<TResult> instance:

  • Aguardando a instância várias vezes.Awaiting the instance multiple times.
  • Chamando AsTask várias vezes.Calling AsTask multiple times.
  • Usar .Result ou.GetAwaiter().GetResult() quando a operação ainda não foi concluída ou usá-las várias vezes.Using .Result or .GetAwaiter().GetResult() when the operation hasn't yet completed, or using them multiple times.
  • Usando mais de uma dessas técnicas para consumir a instância.Using more than one of these techniques to consume the instance.

Se você fizer qualquer uma das opções acima, os resultados serão indefinidos.If you do any of the above, the results are undefined.

Um método pode retornar uma instância desse tipo de valor quando é provável que o resultado de sua operação esteja disponível de forma síncrona e quando se espera que ele seja invocado com tanta frequência que o custo de alocar Task<TResult> um novo para cada chamada será proibitivo.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.

Há compensações no uso de ValueTask<TResult> um em vez Task<TResult>de um.There are tradeoffs to using a ValueTask<TResult> instead of a Task<TResult>. Por exemplo, embora um ValueTask<TResult> possa ajudar a evitar uma alocação no caso em que o resultado bem-sucedido está disponível de forma síncrona, ele também contém vários campos Task<TResult> , enquanto um como tipo de referência é um único campo.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. Isso significa que retornar um ValueTask<TResult> de um método resulta na cópia de mais dados.This means that returning a ValueTask<TResult> from a method results in copying more data. Isso também significa que, se um método que retorna um ValueTask<TResult> for aguardado dentro de um método Async, o computador de estado desse método assíncrono será maior, pois ele deve armazenar um struct contendo vários campos em vez de uma única referência.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.

Para usos que não consomem o resultado de uma operação assíncrona ValueTask<TResult> usando Await, o pode levar a um modelo de programação mais complicadas que exige mais alocações.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 exemplo, considere um método que poderia retornar um Task<TResult> com uma tarefa armazenada em cache como um resultado comum ou um. 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>. Se o consumidor do resultado quiser usá-lo como um Task<TResult> em um método como WhenAll ou WhenAny, o ValueTask<TResult> primeiro deve ser convertido em um Task<TResult> usando AsTask, levando a uma alocação que teria sido evitada se um Task<TResult> em cache foi usado em primeiro 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, a escolha padrão para qualquer método assíncrono deve ser retornar um Task ou. Task<TResult>As such, the default choice for any asynchronous method should be to return a Task or Task<TResult>. Somente se a análise de desempenho provar que vale ValueTask<TResult> a pena deve ser usada Task<TResult>em vez de uma.Only if performance analysis proves it worthwhile should a ValueTask<TResult> be used instead of a Task<TResult>. A versão não genérica do ValueTask não é recomendada para a maioria dos cenários.The non generic version of ValueTask is not recommended for most scenarios. A CompletedTask propriedade deve ser usada para enviar de volta um singleton concluído com êxito no caso em que um método que Task retorna uma conclusão de forma síncrona e bem-sucedida.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.

Observação

O uso do ValueTask<TResult> tipo tem suporte a partir de C# 7,0 e não tem suporte de nenhuma versão do 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.

Construtores

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

Inicializa uma nova instância da classe ValueTask<TResult> usando a tarefa fornecida que representa a operação.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 uma nova instância da classe ValueTask<TResult> usando o resultado fornecido de uma operação bem-sucedida.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 uma nova instância da classe ValueTask<TResult> com um objeto IValueTaskSource<TResult> que representa a operação.Initializes a new instance of the ValueTask<TResult> class with a IValueTaskSource<TResult> object that represents the operation.

Propriedades

IsCanceled IsCanceled IsCanceled IsCanceled

Obtém um valor que indica se este objeto representa uma operação cancelada.Gets a value that indicates whether this object represents a canceled operation.

IsCompleted IsCompleted IsCompleted IsCompleted

Obtém um valor que indica se este objeto representa uma operação concluída.Gets a value that indicates whether this object represents a completed operation.

IsCompletedSuccessfully IsCompletedSuccessfully IsCompletedSuccessfully IsCompletedSuccessfully

Obtém um valor que indica se este objeto representa uma operação concluída com êxito.Gets a value that indicates whether this object represents a successfully completed operation.

IsFaulted IsFaulted IsFaulted IsFaulted

Obtém um valor que indica se este objeto representa uma operação com falha.Gets a value that indicates whether this object represents a failed operation.

Result Result Result Result

Obtém o resultado.Gets the result.

Métodos

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

Recupera um 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 um awaiter para esse valor.Configures an awaiter for this value.

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

Cria um construtor de método para ser usado com um método assíncrono.Creates a method builder for use with an async method.

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

Determina se o objeto especificado é igual ao objeto atual.Determines whether the specified object is equal to the current object.

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

Determina se o objeto ValueTask<TResult> especificado é igual ao objeto ValueTask<TResult> atual.Determines whether the specified ValueTask<TResult> object is equal to the current ValueTask<TResult> object.

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

Cria um awaiter para esse valor.Creates an awaiter for this value.

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

Retorna o código hash para essa instância.Returns the hash code for this instance.

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

Obtém uma ValueTask<TResult> que pode ser usada em qualquer momento no futuro.Gets a ValueTask<TResult> that may be used at any point in the future.

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

Retorna uma cadeia de caracteres que representa o objeto atual.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 dois valores quanto à igualdade.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 se dois valores ValueTask<TResult> são diferentes.Determines whether two ValueTask<TResult> values are unequal.

Aplica-se a