IAsyncAction 接口
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
表示异步操作。 这是许多没有结果对象的 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 Basic、C++、JavaScript中调用异步 API)。
IAsyncAction
也是某些高级方案实用工具 API 的输入类型,例如 CoreDispatcher.RunAsync 和 ThreadPool.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::IAsyncAction
是 IAsyncAction
的 C++/WinRT 投影类型。 扩展函数不是实际 WinRT 类型的应用程序二进制接口(ABI)图面的一部分,因此它们不会列为 WinRT API 的成员。 但是,可以从任何C++/WinRT 项目中调用它们。 请参阅扩展 Windows 运行时 API的
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() |
返回操作的结果。 |