ValueTask Estrutura

Definição

Fornece um resultado esperado de uma operação assíncrona.Provides an awaitable result of an asynchronous operation.

public value class ValueTask : IEquatable<System::Threading::Tasks::ValueTask>
public struct ValueTask : IEquatable<System.Threading.Tasks.ValueTask>
type ValueTask = struct
Public Structure ValueTask
Implements IEquatable(Of ValueTask)
Herança
ValueTask
Implementações

Comentários

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

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

  • Aguardando a instância várias vezes.Awaiting the instance multiple times.
  • Chamar AsTask várias vezes.Calling AsTask 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.

Uma ValueTask é uma estrutura que pode encapsular uma Task ou uma instância de IValueTaskSource.A ValueTask is a structure that can wrap either a Task or a IValueTaskSource instance. Retornar um ValueTask que encapsula uma instância de IValueTaskSource de um método assíncrono permite que aplicativos de alta taxa de transferência evitem alocações usando um pool de objetos de IValueTaskSource reutilizáveis.Returning a ValueTask that wraps a IValueTaskSource instance from an asynchronous method enables high-throughput applications to avoid allocations by using a pool of reusable IValueTaskSource objects. Para obter mais informações, consulte noções básicas sobre porquês, o que e quando é de ValueTask.For more information, see Understanding the Whys, Whats, and Whens of ValueTask.

O uso de um ValueTask em vez de um Task apresenta alguma sobrecarga.Using a ValueTask instead of a Task introduces some overhead. Como ValueTask é uma estrutura com vários campos, retorná-lo do método resulta na cópia de mais dados em comparação com o retorno de uma única referência de Task.Because ValueTask is a structure with multiple fields, returning it from the method results in copying more data compared to returning a single Task reference. Como tal, a escolha padrão para qualquer método assíncrono que não retorna um resultado deve ser para retornar um Task.As such, the default choice for any asynchronous method that does not return a result should be to return a Task. Somente se a análise de desempenho comprova que vale a pena se uma ValueTask ser usada em vez de uma Task.Only if performance analysis proves it worthwhile should a ValueTask be used instead of a Task. A propriedade Task.CompletedTask deve ser usada para redistribuir um singleton concluído com êxito no caso em que um método que retorna um Task é concluído de forma síncrona e bem-sucedida.The Task.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 tipo de ValueTask tem suporte a partir C# de 7,0 e não tem suporte em nenhuma versão do Visual Basic.The use of the ValueTask type is supported starting with C# 7.0 and is not supported by any version of Visual Basic.

Construtores

ValueTask(IValueTaskSource, Int16)

Inicializa uma nova instância da classe ValueTask usando o objeto fornecido IValueTaskSource que representa a operação.Initializes a new instance of the ValueTask class using the supplied IValueTaskSource object that represents the operation.

ValueTask(Task)

Inicializa uma nova instância da classe ValueTask usando a tarefa fornecida que representa a operação.Initializes a new instance of the ValueTask class using the supplied task that represents the operation.

Propriedades

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

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

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

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.

Métodos

AsTask()

Recupera um objeto Task que representa este ValueTask.Retrieves a Task object that represents this ValueTask.

ConfigureAwait(Boolean)

Configura um awaiter para esse valor.Configures an awaiter for this value.

Equals(Object)

Determina se o objeto especificado é igual à instância de ValueTask atual.Determines whether the specified object is equal to the current ValueTask instance.

Equals(ValueTask)

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

GetAwaiter()

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

GetHashCode()

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

Preserve()

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

Operadores

Equality(ValueTask, ValueTask)

Comparar a igualdade de dois valores ValueTask.Compares two ValueTask values for equality.

Inequality(ValueTask, ValueTask)

Determina se dois valores ValueTask são diferentes.Determines whether two ValueTask values are unequal.

Aplica-se a