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

Definizione

Fornisce un tipo valore che esegue il wrapping di un oggetto Task<TResult> e di un oggetto TResult, di cui ne viene usato uno solo.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))

Parametri di tipo

TResult

Risultato.The result.

Ereditarietà
ValueTask<TResult>ValueTask<TResult>ValueTask<TResult>ValueTask<TResult>
Implementazioni
IEquatable<ValueTask<TResult>>

Commenti

Oggetto ValueTask<TResult> istanza può essere atteso o convertita in un Task<TResult> usando AsTask.A ValueTask<TResult> instance may either be awaited or converted to a Task<TResult> using AsTask. Oggetto ValueTask<TResult> istanza può essere atteso solo una volta e i consumer non possono chiamare GetAwaiter() fino a quando l'istanza è stata completata.A ValueTask<TResult> instance may only be awaited once, and consumers may not call GetAwaiter() until the instance has completed. Se queste limitazioni sono inaccettabili, convertire le ValueTask<TResult> a un Task<TResult> chiamando AsTask.If these limitations are unacceptable, convert the ValueTask<TResult> to a Task<TResult> by calling AsTask.

Le operazioni seguenti non devono mai essere eseguite su un ValueTask<TResult> istanza:The following operations should never be performed on a ValueTask<TResult> instance:

  • In attesa l'istanza più volte.Awaiting the instance multiple times.
  • La chiamata AsTask più volte.Calling AsTask multiple times.
  • Usando .Result o .GetAwaiter().GetResult() quando l'operazione non ha ancora completato o usarli più volte.Using .Result or .GetAwaiter().GetResult() when the operation hasn't yet completed, or using them multiple times.
  • Utilizzando più di una di queste tecniche per utilizzare l'istanza.Using more than one of these techniques to consume the instance.

Se si esegue una delle precedenti, i risultati sono indefiniti.If you do any of the above, the results are undefined.

Un metodo può restituire un'istanza di questo tipo di valore quando è probabile che il risultato dell'operazione sarà disponibile in modo sincrono, e quando che dovrebbe essere richiamato con una frequenza che il costo di allocazione di un nuovo Task<TResult> per ciascuna chiamata sarà troppo elevato.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.

Sussistono compromessi all'uso di un ValueTask<TResult> anziché un Task<TResult>.There are tradeoffs to using a ValueTask<TResult> instead of a Task<TResult>. Ad esempio, se un ValueTask<TResult> può contribuire a evitare un'allocazione nel caso in cui il risultato positivo è disponibile in modo sincrono, include inoltre due campi, mentre un Task<TResult> come un riferimento di tipo è un singolo 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 two fields, whereas a Task<TResult> as a reference type is a single field. Ciò significa che una chiamata al metodo restituisce due campi vale la pena di dati invece di uno, che è più dati da copiare.This means that a method call returns two fields worth of data instead of one, which is more data to copy. Significa anche, che se un metodo che restituisce un ValueTask<TResult> è in attesa all'interno di un metodo asincrono, la macchina a stati per tale metodo asincrono sono più grande, perché è necessario archiviare una struttura contenente due campi anziché un solo riferimento.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.

Per usi diversi da utilizza il risultato di un'operazione asincrona utilizzando await, ValueTask<TResult> può portare a un modello di programmazione più complessa che richiede le allocazioni di più.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. Ad esempio, prendere in considerazione un metodo che è stato possibile restituire un Task<TResult> con un'attività memorizzata nella cache come un risultato comune o 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>. Se il consumer del risultato desidera usarla come una Task<TResult> in un metodo come WhenAll o WhenAny, il ValueTask<TResult> deve prima essere convertito in un Task<TResult> usando AsTask, sfociando in un'allocazione che sarebbe stata evitata se un memorizzato nella cache Task<TResult> fosse stata usata in primo luogo.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.

Di conseguenza, deve essere la scelta predefinita per qualsiasi metodo asincrono per restituire un Task o Task<TResult>.As such, the default choice for any asynchronous method should be to return a Task or Task<TResult>. Necessario solo se l'analisi delle prestazioni dimostra utile un ValueTask<TResult> anziché un Task<TResult>.Only if performance analysis proves it worthwhile should a ValueTask<TResult> be used instead of a Task<TResult>. La versione non generica di ValueTask non è consigliato per la maggior parte degli scenari.The non generic version of ValueTask is not recommended for most scenarios. Il CompletedTask proprietà deve essere usata a restituire un singleton completato correttamente nel caso in cui un metodo restituendo un Task viene completata in modo sincrono e completata.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

L'utilizzo dei ValueTask<TResult> tipo è supportato a partire da C# 7.0 e non è supportato da qualsiasi versione di 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.

Costruttori

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

Inizializza una nuova istanza della classe ValueTask<TResult> usando l'attività specificata che rappresenta l'operazione.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)

Inizializza una nuova istanza della classe ValueTask<TResult> usando il risultato specificato di un'operazione riuscita.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)

Proprietà

IsCanceled IsCanceled IsCanceled IsCanceled

Ottiene un valore che indica se l'oggetto rappresenta un'operazione annullata.Gets a value that indicates whether this object represents a canceled operation.

IsCompleted IsCompleted IsCompleted IsCompleted

Ottiene un valore che indica se l'oggetto rappresenta un'operazione completata.Gets a value that indicates whether this object represents a completed operation.

IsCompletedSuccessfully IsCompletedSuccessfully IsCompletedSuccessfully IsCompletedSuccessfully

Ottiene un valore che indica se l'oggetto rappresenta un'operazione completata correttamente.Gets a value that indicates whether this object represents a successfully completed operation.

IsFaulted IsFaulted IsFaulted IsFaulted

Ottiene un valore che indica se l'oggetto rappresenta un'operazione non riuscita.Gets a value that indicates whether this object represents a failed operation.

Result Result Result Result

Ottiene il risultato.Gets the result.

Metodi

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

Recupera un oggetto Task<TResult> che rappresenta questo ValueTask<TResult>.Retrieves a Task<TResult> object that represents this ValueTask<TResult>.

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

Configura un elemento awaiter per questo valore.Configures an awaiter for this value.

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

Crea un generatore di metodo da usare con un metodo asincrono.Creates a method builder for use with an async method.

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

Determina se l'oggetto specificato è uguale all'oggetto corrente.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 l'oggetto ValueTask<TResult> specificato equivale all'oggetto ValueTask<TResult> corrente.Determines whether the specified ValueTask<TResult> object is equal to the current ValueTask<TResult> object.

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

Crea un elemento awaiter per questo valore.Creates an awaiter for this value.

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

Restituisce il codice hash per l'istanza.Returns the hash code for this instance.

Preserve() Preserve() Preserve() Preserve()
ToString() ToString() ToString() ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.Returns a string that represents the current object.

Operatori

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

Confronta due valori per stabilirne l'uguaglianza.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 due valori ValueTask<TResult> sono diversi.Determines whether two ValueTask<TResult> values are unequal.

Si applica a