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 多个不同的 Windows 运行时 API。 报告进度 (且结果) 使用另一个接口 IAsyncOperationWithProgress<TResult,TProgress 的 API>。

当你在应用代码中使用返回 IAsyncOperation<TResult (的方法与 TResult> 特定的约束) 时,通常不会直接访问 IAsyncOperation 返回值。 这是因为你几乎总是使用特定于语言的可等待语法。 在这种情况下,方法的明显返回值是作为 TResult 参数提供的类型。 有关详细信息,请参阅异步编程或特定于语言的指南之一,Windows 运行时异步编程 (在 C# 或 Visual BasicC++JavaScript) 中调用异步 API。

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

某些Windows 运行时异步方法使用自定义操作类型,而不是使用 IAsyncOperation<TResult>。 例如,是一种Windows 运行时类型,DataReaderLoadOperation它使用 uint 作为结果类型实现 IAsyncOperation。 然后,该 DataReaderLoadOperation 类型用作方法的 DataReader.LoadAsync 自定义操作/结果类型。

C++/WinRT 扩展函数

备注

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

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,可以使用 并发运行时。 但是,如果要定义 组件,则可以在内部使用 Task/任务,但必须为公共方法返回其中一个Windows 运行时接口。 特定于语言的异步支持类型 (和许多其他在代码中使用的特定于语言的类型) 不能用于Windows 运行时组件的公共外围区域。

属性

Completed

获取或设置处理操作已完成通知的方法。

ErrorCode

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

(继承自 IAsyncInfo)
Id

获取异步操作的句柄。

(继承自 IAsyncInfo)
Status

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

(继承自 IAsyncInfo)

方法

Cancel()

取消异步操作。

(继承自 IAsyncInfo)
Close()

关闭异步操作。

(继承自 IAsyncInfo)
GetResults()

返回操作的结果。

适用于

另请参阅