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 多个不同的 WinRT API。 报告进度但没有结果的 API 使用另一个接口,IAsyncActionWithProgress

使用在应用代码中返回 IAsyncAction 的方法时,通常不会直接访问 IAsyncAction 返回值。 这是因为你几乎总是使用特定于语言的可等待语法。 在这种情况下,方法的明显返回值 void。 有关详细信息,请参阅 异步编程,或 WinRT 异步编程的一个特定于语言的指南(在 C# 或 Visual BasicC++JavaScript中调用异步 API)。

IAsyncAction 也是某些高级方案实用工具 API 的输入类型,例如 CoreDispatcher.RunAsyncThreadPool.RunAsync

即使不使用特定于语言的可等待语法,也不常见直接使用 IAsyncAction。 每种语言都有扩展点,通常比 WinRT 接口更容易使用。 JavaScript WinJS.Promise,以及 then/done 语法。 .NET 具有 AsTask 扩展方法,IAsyncAction 转换为 任务后,更容易取消、完成通知等。 对于 C++/CX,可以使用 并发运行时(并使用 create_task)包装调用。 换句话说,可以将 IAsyncAction 视为运行时级基础结构,每种语言都将其用作框架,以自己的方式支持可等待的语法或异步编程模型。

某些 WinRT 异步方法使用自定义操作类型(其名称中可能包含“操作”而不是“Action”),而不是使用 IAsyncAction。 例如,SignOutUserOperation 是实现 IAsyncAction的 WinRT 类型。 然后,SignOutUserOperation 类型用作 SignOutUserAsync 方法的自定义操作返回类型。

如果你有一个返回 .NET Task 且需要传递给 WinRT API IAsyncAction 的方法,则可以使用 AsAsyncAction 扩展方法。

C++/WinRT 扩展函数

注意

某些 WinRT API 的 C++/WinRT 投影类型上存在扩展函数。 例如,winrt::Windows::Foundation::IAsyncActionIAsyncAction的 C++/WinRT 投影类型。 扩展函数不是实际 WinRT 类型的应用程序二进制接口(ABI)图面的一部分,因此它们不会列为 WinRT API 的成员。 但是,可以从任何C++/WinRT 项目中调用它们。 请参阅扩展 Windows 运行时 API的 C++/WinRT 函数。

void get() const;

同步等待操作完成。 如果取消操作或进入错误状态,则会引发相应的异常。 不得从单线程单元调用它。 有关详细信息,以及演示如何调用 get的代码示例,请参阅 编写协同例程

AsyncStatus wait_for(TimeSpan const& timeout) const;

同步等待操作完成,或等待指定的超时。 返回 IAsyncAction的状态;如果超时已过,则返回 AsyncStatus::Started。 如果操作未超时,请调用 GetResults 以获取操作的结果。 有关详细信息,以及演示如何调用 wait_for的代码示例,请参阅 异步超时可轻松

接口继承

IAsyncAction 继承 IAsyncInfo。 实现 IAsyncAction 的类型还实现 IAsyncInfo的接口成员:

实现者的说明

与调用现有方法一样,有一些特定于语言的方法可以定义不使用 IAsyncInfo 的异步方法。 如果使用 .NET 编写代码,则方法可以返回 任务。 对于 C++/CX,可以使用 并发运行时。 但是,如果要定义 组件,则可以在内部使用 Task/task,但必须为公共方法返回其中一个 WinRT 接口。 特定于语言的异步支持类型(以及通常在代码中使用的许多其他特定于语言的类型)不能用于 WinRT 组件的公共外围应用。

属性

Completed

获取或设置操作完成时调用的委托。

ErrorCode

获取描述异步操作的错误条件的字符串。

(继承自 IAsyncInfo)
Id

获取异步操作的句柄。

(继承自 IAsyncInfo)
Status

获取一个值,该值指示异步操作的状态。

(继承自 IAsyncInfo)

方法

Cancel()

取消异步操作。

(继承自 IAsyncInfo)
Close()

关闭异步操作。

(继承自 IAsyncInfo)
GetResults()

返回操作的结果。

适用于

另请参阅