ValueTask Struktura

Definicja

Zapewnia oczekiwany wynik operacji asynchronicznej.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)
Dziedziczenie
ValueTask
Implementuje

Uwagi

Wystąpienie może być oczekiwane lub przekonwertowane Task na użycie AsTask. ValueTaskA ValueTask instance may either be awaited or converted to a Task using AsTask. Wystąpienie może być oczekiwane tylko raz, a konsumenci mogą nie wywoływać GetAwaiter() do momentu zakończenia wystąpienia. ValueTaskA ValueTask instance may only be awaited once, and consumers may not call GetAwaiter() until the instance has completed. Jeśli te ograniczenia są nieakceptowalne, przekonwertuj ValueTask Task na, wywołując AsTaskmetodę.If these limitations are unacceptable, convert the ValueTask to a Task by calling AsTask.

Następujące operacje nigdy nie powinny być wykonywane w ValueTask przypadku wystąpienia:The following operations should never be performed on a ValueTask instance:

  • Wiele razy czeka na wystąpienie.Awaiting the instance multiple times.
  • Wywoływanie AsTask wiele razy.Calling AsTask multiple times.
  • Użycie więcej niż jednej z tych technik do korzystania z wystąpienia.Using more than one of these techniques to consume the instance.

Jeśli wykonasz dowolne z powyższych czynności, wyniki są niezdefiniowane.If you do any of the above, the results are undefined.

A ValueTask to struktura, która może zawijać Task albo albo IValueTaskSource wystąpienie.A ValueTask is a structure that can wrap either a Task or a IValueTaskSource instance. IValueTaskSource Zwrócenie obiektu IValueTaskSource , który zawija wystąpienie z metody asynchronicznej, pozwala aplikacjom o wysokiej przepływności na uniknięcie alokacji przy użyciu puli obiektów ValueTask wielokrotnego użytku.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. Aby uzyskać więcej informacji, zobacz Omówienie Dlaczego, co i ValueTask.For more information, see Understanding the Whys, Whats, and Whens of ValueTask.

ValueTask Użycie zamiast Task wprowadza pewne narzuty.Using a ValueTask instead of a Task introduces some overhead. Ponieważ ValueTask jest strukturą z wieloma polami, zwracając ją z metody, powstaje kopiowanie większej ilości danych w porównaniu do zwrócenia jednego Task odwołania.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. W związku z tym Domyślnym wyborem dla każdej metody asynchronicznej, która nie zwraca wyniku, powinno być zwrócenie elementu Task.As such, the default choice for any asynchronous method that does not return a result should be to return a Task. Tylko wtedy, gdy analiza wydajności udowodni, że wartościowa ValueTask powinna być używana zamiast. TaskOnly if performance analysis proves it worthwhile should a ValueTask be used instead of a Task. Właściwość powinna zostać użyta, aby ręcznie zakończyć działanie pojedyncze w przypadku, gdy metoda zwracająca się Task synchronicznie i pomyślnie. Task.CompletedTaskThe 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.

Uwaga

Użycie ValueTask tego typu jest obsługiwane począwszy od C# 7,0 i nie jest obsługiwane przez żadną wersję 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.

Konstruktory

ValueTask(IValueTaskSource, Int16)

Inicjuje nowe wystąpienie ValueTask klasy za pomocą podanego IValueTaskSource obiektu, który reprezentuje operację.Initializes a new instance of the ValueTask class using the supplied IValueTaskSource object that represents the operation.

ValueTask(Task)

Inicjuje nowe wystąpienie ValueTask klasy przy użyciu dostarczonego zadania, które reprezentuje operację.Initializes a new instance of the ValueTask class using the supplied task that represents the operation.

Właściwości

IsCanceled

Pobiera wartość wskazującą, czy ten obiekt reprezentuje operację anulowaną.Gets a value that indicates whether this object represents a canceled operation.

IsCompleted

Pobiera wartość wskazującą, czy ten obiekt reprezentuje ukończoną operację.Gets a value that indicates whether this object represents a completed operation.

IsCompletedSuccessfully

Pobiera wartość wskazującą, czy ten obiekt reprezentuje pomyślnie ukończoną operację.Gets a value that indicates whether this object represents a successfully completed operation.

IsFaulted

Pobiera wartość wskazującą, czy ten obiekt reprezentuje niepowodzenie operacji.Gets a value that indicates whether this object represents a failed operation.

Metody

AsTask()

Pobiera obiekt Task , który reprezentuje ten ValueTaskelement.Retrieves a Task object that represents this ValueTask.

ConfigureAwait(Boolean)

Konfiguruje await dla tej wartości.Configures an awaiter for this value.

Equals(Object)

Określa, czy określony obiekt jest równy bieżącemu ValueTask wystąpieniu.Determines whether the specified object is equal to the current ValueTask instance.

Equals(ValueTask)

Określa, czy określony ValueTask obiekt jest równy bieżącemu ValueTask obiektowi.Determines whether the specified ValueTask object is equal to the current ValueTask object.

GetAwaiter()

Tworzy obiekt awaiter dla tej wartości.Creates an awaiter for this value.

GetHashCode()

Zwraca kod skrótu dla tego wystąpienia.Returns the hash code for this instance.

Preserve()

ValueTask Pobiera, który może być używany w dowolnym momencie w przyszłości.Gets a ValueTask that may be used at any point in the future.

Operatory

Equality(ValueTask, ValueTask)

Porównuje ValueTask dwie wartości dla równości.Compares two ValueTask values for equality.

Inequality(ValueTask, ValueTask)

Określa, czy ValueTask dwie wartości są różne.Determines whether two ValueTask values are unequal.

Dotyczy