IAsyncOperation<TResult> Интерфейс

Определение

Представляет асинхронную операцию, которая возвращает результат после завершения. Это тип возврата для многих асинхронных методов среды выполнения Windows (WinRT), которые имеют результаты, но не сообщают о ходе выполнения.

public interface class IAsyncOperation : IAsyncInfo
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.FoundationContract, 65536)]
/// [Windows.Foundation.Metadata.Guid(2680336571, 58438, 17634, 170, 97, 156, 171, 143, 99, 106, 242)]
template <typename TResult>
struct IAsyncOperation : IAsyncInfo
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.FoundationContract), 65536)]
[Windows.Foundation.Metadata.Guid(2680336571, 58438, 17634, 170, 97, 156, 171, 143, 99, 106, 242)]
public interface IAsyncOperation<TResult> : IAsyncInfo
Public Interface IAsyncOperation(Of TResult)
Implements IAsyncInfo

Параметры типа

TResult
Производный
Атрибуты
Реализации

Требования к Windows

Семейство устройств
Windows 10 (появилось в 10.0.10240.0)
API contract
Windows.Foundation.FoundationContract (появилось в v1.0)

Комментарии

IAsyncOperation<TResult> — это тип возврата для многих асинхронных методов WinRT, которые имеют результат после завершения, но не сообщают о ходе выполнения. Это составляет более 650 различных API WinRT. API, которые сообщают о ходе выполнения и имеют результат, используют другой интерфейс, IAsyncOperationWithProgress<TResult,TProgress>.

При использовании методов, возвращающих IAsyncOperation<TResult>TResult определенным ограничением) в коде приложения, обычно не обращаются к IAsyncOperation возвращаемого значения напрямую. Это связано с тем, что вы почти всегда используете синтаксис, предназначенный для конкретного языка. В этом случае очевидное возвращаемое значение метода является типом, предоставленным в качестве параметра TResult. Дополнительные сведения см. в статье Асинхронное программированиеили одно из руководств по асинхронным программированию WinRT (Вызов асинхронных API в C# или Visual Basic, C++, JavaScript).

Это не часто используется IAsyncOperation<TResult> напрямую, даже если вы не используете синтаксис, предназначенный для конкретного языка. Каждый из языков имеет точки расширения, которые обычно проще использовать, чем интерфейс WinRT. JavaScript имеет WinJS.Promise и синтаксис then/done. .NET имеет метод расширения AsTask, а после преобразования IAsyncOperation<TResult> в task<TResult>проще получить результат, отменить, получить уведомление о завершении и т. д. Для C++/CX можно упаковать вызовы с помощью среды выполнения параллелизма (и использовать create_task). Другими словами, IAsyncOperation<TResult> можно рассматривать как инфраструктуру уровня среды выполнения, которая используется на каждом из языков в качестве платформы для поддержки ожидаемого синтаксиса или асинхронных моделей программирования.

Вместо использования IAsyncOperation<TResult>некоторые асинхронные методы WinRT используют пользовательские типы операций. Например, DataReaderLoadOperation — это тип WinRT, реализующий с помощью в качестве типа результата. Затем тип DataReaderLoadOperation используется в качестве пользовательского типа операции или результата для метода DataReader.LoadAsync.

Если у вас есть метод, который возвращает Task<T> .NET и требуется IAsyncOperation<TResult> для передачи в API WinRT, можно использовать метод расширения AsAsyncOperation.

Функции расширения C++/WinRT

Заметка

Функции расширения существуют в типах проекций C++/WinRT для определенных API WinRT. Например, winrt::Windows::Foundation::IAsyncAction — это тип проекции C++/WinRT для IAsyncAction. Функции расширения не являются частью поверхности двоичного интерфейса приложения (ABI) фактических типов WinRT, поэтому они не перечислены как члены API WinRT. Но их можно вызывать из любого проекта C++/WinRT. См. функции C++/WinRT, расширяющие API среды выполнения Windows.

TResult get() const;

Ожидает синхронно завершения операции и возвращает завершенное значение. Вызывает соответствующее исключение, если операция отменена или вводит состояние ошибки. Вы не должны вызывать его из однопоточной квартиры. Дополнительные сведения и примеры кода, показывающие, как вызывать get, см. в статье Написаниекорутины.

AsyncStatus wait_for(TimeSpan const& timeout) const;

Ожидает синхронно завершения операции или указанного времени ожидания. Возвращает состояние IAsyncOperationили AsyncStatus::Started, если истекло время ожидания. Если действие не истекает, вызовите GetResults, чтобы получить результаты операции. Дополнительные сведения и примеры кода, показывающие, как вызывать wait_for, см. в статье асинхронные ожидания, которые упрощают.

Наследование интерфейса

IAsyncOperation<TResult> наследует IAsyncInfo. Типы, реализующие IAsyncOperation<TResult>, также реализуют элементы интерфейса IAsyncInfo:

  • Метод отмены
  • метод close
  • свойство ErrorCode
  • Свойство идентификатора
  • свойство status

Заметки для разработчиков

Как и при вызове существующих методов, существуют способы определения асинхронных методов, которые не используют IAsyncOperation<TResult> напрямую. При написании кода с помощью .NET метод может вернуть task<TResult>. Для C++/CX можно использоватьсреды выполнения параллелизма . Однако если вы определяетекомпонента , вы можете использовать внутренне, но необходимо вернуть один из интерфейсов WinRT для общедоступных методов. Типы асинхронной поддержки для конкретного языка (и многие другие типы, которые можно использовать в коде) нельзя использовать для общедоступной области поверхности компонента WinRT.

Свойства

Completed

Возвращает или задает делегат, который вызывается при завершении операции.

ErrorCode

Возвращает строку, описывающую условие ошибки асинхронной операции.

(Унаследовано от IAsyncInfo)
Id

Возвращает дескриптор асинхронной операции.

(Унаследовано от IAsyncInfo)
Status

Возвращает значение, указывающее состояние асинхронной операции.

(Унаследовано от IAsyncInfo)

Методы

Cancel()

Отменяет асинхронную операцию.

(Унаследовано от IAsyncInfo)
Close()

Закрывает асинхронную операцию.

(Унаследовано от IAsyncInfo)
GetResults()

Возвращает результаты операции.

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

См. также раздел