IAsyncOperationWithProgress<TResult,TProgress> 接口

定义

表示可以向调用方报告进度更新的异步操作。 这是许多Windows 运行时异步方法的返回类型,这些方法具有结果并报告进度。

public interface class IAsyncOperationWithProgress : IAsyncInfo
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.FoundationContract, 65536)]
/// [Windows.Foundation.Metadata.Guid(3050321623, 58007, 18831, 186, 96, 2, 137, 231, 110, 35, 221)]
template <typename TResult, typename TProgress>
struct IAsyncOperationWithProgress : IAsyncInfo
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.FoundationContract), 65536)]
[Windows.Foundation.Metadata.Guid(3050321623, 58007, 18831, 186, 96, 2, 137, 231, 110, 35, 221)]
public interface IAsyncOperationWithProgress<TResult,TProgress> : IAsyncInfo
Public Interface IAsyncOperationWithProgress(Of TResult, TProgress)
Implements IAsyncInfo

类型参数

TResult
TProgress
派生
属性
实现

Windows 要求

设备系列
Windows 10 (在 10.0.10240.0 中引入)
API contract
Windows.Foundation.FoundationContract (在 v1.0 中引入)

注解

IAsyncOperationWithProgress<TResult,TProgress> 是许多Windows 运行时异步方法的返回类型,这些方法在完成时具有结果,还支持报告进度 (调用方可以通过为 Progress) 分配回调来订阅的通知。 这大约包含 100 个不同的Windows 运行时 API。 不报告进度 (但结果) 使用另一个接口 IAsyncOperation<TResult> 的 API。

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

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

具体而言,如果要在 .NET 代码中处理进度,请使用 AsTask 签名,该签名在扩展用法中具有单个 IProgress 引用参数。 (在此用法中,进度单元已受到约束,并且与正在使用的 IAsyncOperationWithProgress 方法匹配。) 提供实现 IProgress 的对象,并且每次Windows 运行时方法报告进度通知时都会调用 Report 方法实现。

若要在不使用上述特定于语言的技术) 监视操作 (的进度,请设置 Progress 属性,并为其提供实现 AsyncOperationProgressHandler<TResult,TProgress> 委托的方法的名称。

C++/WinRT 扩展函数

注意

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

TResult get() const;

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

AsyncStatus wait_for(TimeSpan const& timeout) const;

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

接口继承

IAsyncOperationWithProgress<TResult,TProgress> 继承 IAsyncInfo。 实现 IAsyncOperationWithProgress<TResult,TProgress> 的类型也实现 IAsyncInfo 的接口成员:

实施者说明

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

属性

Completed

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

ErrorCode

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

(继承自 IAsyncInfo)
Id

获取异步操作的句柄。

(继承自 IAsyncInfo)
Progress

获取或设置处理进度通知的方法。

Status

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

(继承自 IAsyncInfo)

方法

Cancel()

取消异步操作。

(继承自 IAsyncInfo)
Close()

关闭异步操作。

(继承自 IAsyncInfo)
GetResults()

返回操作的结果。

适用于

另请参阅