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

Определение

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

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> — это тип возвращаемого значения для многих среда выполнения Windows асинхронных методов, которые имеют результат после завершения, но не сообщают о ходе выполнения. Это более 650 различных API среда выполнения Windows. API, которые сообщают о ходе выполнения (и имеют результат), используют другой интерфейс IAsyncOperationWithProgress<TResult,TProgress>.

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

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

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

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

Примечание

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

TResult get() const;

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

AsyncStatus wait_for(TimeSpan const& timeout) const;

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

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

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

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

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

Свойства

Completed

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

ErrorCode

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

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

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

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

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

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

Методы

Cancel()

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

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

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

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

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

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

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