ValueTask Estrutura
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Fornece um resultado aguardável de uma operação assíncrona.
public value class ValueTask : IEquatable<System::Threading::Tasks::ValueTask>
public readonly struct ValueTask : IEquatable<System.Threading.Tasks.ValueTask>
type ValueTask = struct
Public Structure ValueTask
Implements IEquatable(Of ValueTask)
- Herança
- Implementações
Observações
Uma ValueTask instância pode ser aguardada ou convertida em um Task usando AsTask. Uma ValueTask instância só pode ser aguardada uma vez, e os consumidores não podem ligar GetAwaiter() até que a instância esteja concluída. Se estas limitações forem inaceitáveis, converte o ValueTask para a Task chamando AsTask.
As seguintes operações nunca devem ser realizadas numa ValueTask instância:
- Estou à espera da instância várias vezes.
- Liguei AsTask várias vezes.
- Usar mais do que uma destas técnicas para consumir a instância.
Se fizer qualquer uma das situações acima, os resultados ficam indefinidos.
A ValueTask é uma estrutura que pode envolver tanto a Task como uma IValueTaskSource instância. Devolver um ValueTask que envolve uma IValueTaskSource instância de um método assíncrono permite que aplicações de alto débito evitem alocações usando um conjunto de objetos reutilizáveis IValueTaskSource . Para mais informações, consulte Compreender os Porquês, Quais e Quando do ValueTask.
Usar um ValueTask em vez de um Task introduz algum overhead. Como ValueTask é uma estrutura com múltiplos campos, retorná-la do método resulta em copiar mais dados em comparação com devolver uma única Task referência. Assim, a escolha padrão para qualquer método assíncrono que não devolve um resultado deve ser devolver um Task. Só se a análise de desempenho provar que vale a pena deve ValueTask ser usada em vez de um Task. A Task.CompletedTask propriedade deve ser usada para devolver um singleton concluído com sucesso no caso em que um método que devolve a Task se complete de forma síncrona e bem-sucedida.
Note
O uso do tipo ValueTask é suportado a partir de C# 7.0 e não é suportado por nenhuma versão do Visual Basic.
Note
Uma instância criada com o construtor sem parâmetros ou pela default(ValueTask) sintaxe (uma estrutura zero-inicializada) representa uma operação síncrona e concluída com sucesso.
Construtores
| Name | Description |
|---|---|
| ValueTask(IValueTaskSource, Int16) |
Inicializa uma nova instância da ValueTask classe usando o objeto fornecido IValueTaskSource que representa a operação. |
| ValueTask(Task) |
Inicializa uma nova instância da ValueTask classe usando a tarefa fornecida que representa a operação. |
Propriedades
| Name | Description |
|---|---|
| IsCanceled |
Obtém um valor que indica se este objeto representa uma operação cancelada. |
| IsCompleted |
Obtém um valor que indica se este objeto representa uma operação concluída. |
| IsCompletedSuccessfully |
Obtém um valor que indica se este objeto representa uma operação concluída com sucesso. |
| IsFaulted |
Obtém um valor que indica se este objeto representa uma operação falhada. |
Métodos
| Name | Description |
|---|---|
| AsTask() | |
| ConfigureAwait(Boolean) |
Configura um awaiter para este valor. |
| Equals(Object) |
Determina se o objeto especificado é igual à instância atual ValueTask . |
| Equals(ValueTask) |
Determina se o objeto especificado ValueTask é igual ao objeto atual ValueTask . |
| GetAwaiter() |
Cria um servidor para este valor. |
| GetHashCode() |
Devolve o código de hash para esta instância. |
| Preserve() |
Recebe um ValueTask que pode ser usado a qualquer momento no futuro. |
Operadores
| Name | Description |
|---|---|
| Equality(ValueTask, ValueTask) |
Compara dois ValueTask valores para igualdade. |
| Inequality(ValueTask, ValueTask) |
Determina se dois ValueTask valores são desiguais. |