ValueTask Структура

Определение

Предоставляет ожидаемый результат асинхронной операции.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)
Наследование
ValueTask
Реализации

Комментарии

Экземпляр ValueTask может быть либо ожидающим, либо преобразованным в Task с помощью AsTask.A ValueTask instance may either be awaited or converted to a Task using AsTask. ValueTask экземпляр можно ожидать только один раз, и потребители могут не вызывать GetAwaiter() до тех пор, пока экземпляр не будет завершен.A ValueTask instance may only be awaited once, and consumers may not call GetAwaiter() until the instance has completed. Если эти ограничения неприемлемы, преобразуйте ValueTask в Task, вызвав AsTask.If these limitations are unacceptable, convert the ValueTask to a Task by calling AsTask.

Следующие операции не должны выполняться на экземпляре ValueTask:The following operations should never be performed on a ValueTask instance:

  • Ожидание экземпляра несколько раз.Awaiting the instance multiple times.
  • Вызов AsTask несколько раз.Calling AsTask multiple times.
  • Использование более чем одного из этих методов для использования экземпляра.Using more than one of these techniques to consume the instance.

Если вы выполните одно из указанных выше действий, результаты не будут определены.If you do any of the above, the results are undefined.

ValueTask — это структура, которая может заключить в оболочку Task или экземпляр IValueTaskSource.A ValueTask is a structure that can wrap either a Task or a IValueTaskSource instance. Возврат ValueTask, который создает оболочку для экземпляра IValueTaskSource из асинхронного метода, позволяет приложениям с высокой пропускной способностью избежать выделения памяти с помощью пула многократно используемых объектов IValueTaskSource.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. Дополнительные сведения см. в статьях понимание причинах, что и когда имеет ValueTask.For more information, see Understanding the Whys, Whats, and Whens of ValueTask.

Использование ValueTask вместо Task вводит некоторые издержки.Using a ValueTask instead of a Task introduces some overhead. Поскольку ValueTask является структурой с несколькими полями, возвращение ее из метода приводит к копированию большего количества данных по сравнению с возвратом одной ссылки 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. Таким образом, по умолчанию для любого асинхронного метода, который не возвращает результат, следует возвращать Task.As such, the default choice for any asynchronous method that does not return a result should be to return a Task. Только если анализ производительности доказывает, что необходимо использовать ValueTask вместо Task.Only if performance analysis proves it worthwhile should a ValueTask be used instead of a Task. Свойство Task.CompletedTask следует использовать для обратного успешного завершения одноэлементного элемента в случае, когда метод, возвращающий Task, завершается синхронно и успешно.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.

Примечание

Использование типа ValueTask поддерживается начиная с C# 7,0 и не поддерживается ни одной из версий 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.

Конструкторы

ValueTask(IValueTaskSource, Int16)

Инициализирует новый экземпляр класса ValueTask, используя указанный объект IValueTaskSource, который представляет операцию.Initializes a new instance of the ValueTask class using the supplied IValueTaskSource object that represents the operation.

ValueTask(Task)

Инициализирует новый экземпляр класса ValueTask, используя указанную задачу, которая представляет операцию.Initializes a new instance of the ValueTask class using the supplied task that represents the operation.

Свойства

IsCanceled

Возвращает значение, указывающее, представляет ли этот объект отмененную операцию.Gets a value that indicates whether this object represents a canceled operation.

IsCompleted

Возвращает значение, указывающее, представляет ли этот объект завершенную операцию.Gets a value that indicates whether this object represents a completed operation.

IsCompletedSuccessfully

Возвращает значение, указывающее, представляет ли этот объект успешно завершенную операцию.Gets a value that indicates whether this object represents a successfully completed operation.

IsFaulted

Возвращает значение, указывающее, представляет ли этот объект операцию, завершившуюся ошибкой.Gets a value that indicates whether this object represents a failed operation.

Методы

AsTask()

Получает объект Task, который представляет ValueTask.Retrieves a Task object that represents this ValueTask.

ConfigureAwait(Boolean)

Настраивает объект типа awaiter для этого значения.Configures an awaiter for this value.

Equals(Object)

Определяет, равен ли текущий экземпляр ValueTask указанному объекту.Determines whether the specified object is equal to the current ValueTask instance.

Equals(ValueTask)

Определяет, равен ли заданный объект ValueTask текущему объекту ValueTask.Determines whether the specified ValueTask object is equal to the current ValueTask object.

GetAwaiter()

Создает объект типа awaiter для этого значения.Creates an awaiter for this value.

GetHashCode()

Возвращает хэш-код данного экземпляра.Returns the hash code for this instance.

Preserve()

Получает объект ValueTask, который можно будет использовать в любой момент в будущем.Gets a ValueTask that may be used at any point in the future.

Операторы

Equality(ValueTask, ValueTask)

Сравнивает два значения ValueTask на предмет их равенства.Compares two ValueTask values for equality.

Inequality(ValueTask, ValueTask)

Определяет неравенство двух значений ValueTask.Determines whether two ValueTask values are unequal.

Применяется к