IAsyncOperation<TResult> 接口
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
表示异步操作,该操作在完成时返回结果。 这是许多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。 报告进度 (并具有结果的 API) 使用另一个接口 IAsyncOperationWithProgress<TResult,TProgress>。
当你使用在应用代码中使用返回 IAsyncOperation<TResult> (且具有 TResult 特定约束) 的方法时,通常不会直接访问 IAsyncOperation 返回值。 这是因为你几乎总是使用特定于语言的可等待语法。 在这种情况下,方法的明显返回值是作为 TResult 参数提供的类型。 有关详细信息,请参阅异步编程,或Windows 运行时异步编程 (调用 C# 或 Visual Basic、C++、JavaScript) 异步 API 的特定于语言的指南之一。
即使不使用特定于语言的可等待语法,直接使用 IAsyncOperation<TResult> 也不常见。 每种语言都具有通常比 Windows 运行时 接口更易于使用的扩展点。 JavaScript 具有 WinJS.Promise 和 then/done 语法。 .NET 具有 AsTask 扩展方法,一旦 IAsyncOperation<TResult> 转换为 Task<TResult>,可以更轻松地获取结果、取消、在完成时获取通知等。 对于 C++/CX,可以使用 并发运行时 (包装调用,并使用 create_task) 。 换句话说,IAsyncOperation<TResult> 可以被视为运行时级基础结构,每个语言都将其用作框架,以自己的方式支持可等待的语法或异步编程模型。
某些Windows 运行时异步方法使用自定义操作类型,而不是使用 IAsyncOperation<TResult>。 例如,DataReaderLoadOperation 是一种Windows 运行时类型,它使用 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() |
返回操作的结果。 |
适用于
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈