IAsyncOperation<TResult> 接口
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
表示一个异步操作,该操作在完成时返回结果。 这是许多具有结果但未报告进度的 Windows 运行时 (WinRT) 异步方法的返回类型。
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>
是许多 WinRT 异步方法的返回类型,这些方法在完成时具有结果,但不报告进度。 这构成了 650 多个不同的 WinRT API。 报告进度并具有结果的 API 使用另一个接口,IAsyncOperationWithProgress<TResult,TProgress>。
在应用代码中使用返回 IAsyncOperation<TResult>
(具有 TResult
特定约束)的方法时,通常不会直接访问 IAsyncOperation
返回值。 这是因为你几乎总是使用特定于语言的可等待语法。 在这种情况下,方法的明显返回值是作为 TResult
参数提供的类型。 有关详细信息,请参阅 异步编程,或 WinRT 异步编程的一个特定于语言的指南(在 C# 或 Visual Basic、C++、JavaScript中调用异步 API)。
即使不使用特定于语言的可等待语法,也不常见直接使用 IAsyncOperation<TResult>
。 每种语言都有扩展点,通常比 WinRT 接口更容易使用。 JavaScript WinJS.Promise,以及 then
/done
语法。 .NET 具有 AsTask 扩展方法,一旦 IAsyncOperation<TResult>
转换为 任务<TResult>,则更容易获取结果、取消、完成通知等。 对于 C++/CX,可以使用 并发运行时(并使用 create_task)包装调用。 换句话说,可以将 IAsyncOperation<TResult>
视为运行时级基础结构,每种语言都将其用作框架,以自己的方式支持可等待的语法或异步编程模型。
某些 WinRT 异步方法不使用 IAsyncOperation<TResult>
,而是使用自定义操作类型。 例如,DataReaderLoadOperation 是一种 WinRT 类型,它使用 uint
作为结果类型实现 IAsyncOperation
。 然后,DataReaderLoadOperation 类型用作 DataReader.LoadAsync 方法的自定义操作/结果类型。
如果方法返回 .NET Task<T>
,并且需要 IAsyncOperation<TResult>
传递给 WinRT API,则可以使用 AsAsyncOperation 扩展方法。
C++/WinRT 扩展函数
注意
某些 WinRT API 的 C++/WinRT 投影类型上存在扩展函数。 例如,winrt::Windows::Foundation::IAsyncAction
是 IAsyncAction的 C++/WinRT 投影类型。 扩展函数不是实际 WinRT 类型的应用程序二进制接口(ABI)图面的一部分,因此它们不会列为 WinRT API 的成员。 但是,可以从任何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 编写代码,则方法可以返回 任务<TResult>。 对于 C++/CX,可以使用 并发运行时。 但是,如果要定义 组件,则可以在内部使用 Task
/task
,但必须为公共方法返回其中一个 WinRT 接口。 特定于语言的异步支持类型(以及通常在代码中使用的许多其他特定于语言的类型)不能用于 WinRT 组件的公共外围应用。
属性
Completed |
获取或设置在操作完成时调用的委托。 |
ErrorCode |
获取描述异步操作的错误条件的字符串。 (继承自 IAsyncInfo) |
Id |
获取异步操作的句柄。 (继承自 IAsyncInfo) |
Status |
获取一个值,该值指示异步操作的状态。 (继承自 IAsyncInfo) |
方法
Cancel() |
取消异步操作。 (继承自 IAsyncInfo) |
Close() |
关闭异步操作。 (继承自 IAsyncInfo) |
GetResults() |
返回操作的结果。 |
适用于
另请参阅
- IAsyncInfo
- IAsyncOperationWithProgress<TResult,TProgress>
- IAsyncAction
- 任务
- 异步编程
- 使用 Windows 运行时组件