Поделиться через


IAsyncAction Интерфейс

Определение

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

public interface class IAsyncAction : IAsyncInfo
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.FoundationContract, 65536)]
/// [Windows.Foundation.Metadata.Guid(1516535814, 33850, 19881, 134, 91, 157, 38, 229, 223, 173, 123)]
struct IAsyncAction : IAsyncInfo
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.FoundationContract), 65536)]
[Windows.Foundation.Metadata.Guid(1516535814, 33850, 19881, 134, 91, 157, 38, 229, 223, 173, 123)]
public interface IAsyncAction : IAsyncInfo
Public Interface IAsyncAction
Implements IAsyncInfo
Производный
Атрибуты
Реализации

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

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

Комментарии

IAsyncAction — это тип возвращаемого значения для всех асинхронных методов WinRT, которые не взаимодействуют с результирующий объект или текущий ход выполнения. Это составляет более 300 различных API WinRT. API, которые сообщают о ходе выполнения, но не имеют результата, используют другой интерфейс, IAsyncActionWithProgress.

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

IAsyncAction также является типом входных данных для некоторых api-интерфейсов программы расширенного сценария, таких как CoreDispatcher.RunAsync и ThreadPool.RunAsync.

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

Вместо использования IAsyncActionнекоторые асинхронные методы WinRT используют пользовательские типы действий (которые могут иметь "Операция", а не "Действие" в их имени). Например, SignOutUserOperation — это тип WinRT, реализующий . Затем тип signOutUserOperation используется в качестве типа возврата пользовательского действия для метода SignOutUserAsync.

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

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

Заметка

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

void get() const;

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

AsyncStatus wait_for(TimeSpan const& timeout) const;

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

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

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

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

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

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

Свойства

Completed

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

ErrorCode

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

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

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

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

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

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

Методы

Cancel()

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

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

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

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

Возвращает результаты действия.

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

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