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
Если у вас есть метод, который возвращает 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 можно использоватьсреды выполнения параллелизма
Свойства
Completed |
Возвращает или задает делегат, который вызывается при завершении операции. |
ErrorCode |
Возвращает строку, описывающую условие ошибки асинхронной операции. (Унаследовано от IAsyncInfo) |
Id |
Возвращает дескриптор асинхронной операции. (Унаследовано от IAsyncInfo) |
Status |
Возвращает значение, указывающее состояние асинхронной операции. (Унаследовано от IAsyncInfo) |
Методы
Cancel() |
Отменяет асинхронную операцию. (Унаследовано от IAsyncInfo) |
Close() |
Закрывает асинхронную операцию. (Унаследовано от IAsyncInfo) |
GetResults() |
Возвращает результаты операции. |