create_async 函数 (C++ REST SDK)

基于用户提供的 lambda 或函数对象创建 Windows 运行时异步构造。 create_async 的返回类型是基于传递给方法的 lambda 的签名的 IAsyncAction^IAsyncActionWithProgress<TProgress>^IAsyncOperation<TResult>^IAsyncOperationWithProgress<TResult, TProgress>^ 之一。

警告

本主题包含有关 C++ REST SDK 1.0 (codename "Casablanca") 的信息。如果你正在从 Codeplex Casablanca 网页 使用更高版本,则使用 http://casablanca.codeplex.com/documentation 上的本地文档。

template<    typename _Function > __declspec(    noinline ) auto create_async(const _Function& _Func) -> decltype(ref new details::_AsyncTaskGeneratorThunk<_Function>(_Func));

参数

  • _Function

  • _Func
    从其中创建 Windows 运行时异步构造的 lambda 或函数对象。

返回值

IAsyncAction^、IAsyncActionWithProgress<TProgress>^、IAsyncOperation<TResult>^ 或 IAsyncOperationWithProgress<TResult, TProgress>^ 表示的异步构造。 返回的接口依赖于传递给函数的 lambda 的签名。

备注

lambda 的返回类型确定该构造是一个行为还是一项操作。

返回 void 的 lambda 将导致创建一些行为。 返回类型为 TResult 的结果的 lambda 将导致创建 TResult 的操作。

lambda 可能还返回 task<TResult>(在自身中封装异步工作或是表示异步工作的任务链的延续)。 在此示例中,由于任务是异步执行的,所以将以内联方式执行 lambda,并且将解包 lambda 的返回类型以生成 create_async 返回的异步构造。 这意味着返回 task<void> 的 lambda 将导致创建一些行为,并且返回 task<TResult> 的 lambda 将导致创建 TResult 操作。

lambda 可采用零个、一个或两个参数。 有效的参数是 progress_reporter<TProgress>cancellation_token(此顺序为同时使用两个参数的顺序)。 无参数的 lambda 将导致创建一个缺少进度报告功能的异步构造。 采用 progress_reporter<TProgress> 的 lambda 将导致 create_async 返回一个异步构造,在每次调用 progress_reporter 对象的 report 方法时,该异步构造将报告 TProgress 类型的进度。 采用 cancellation_token 的 lambda 可以使用该标记来检查取消情况,或将该标记传递给它创建的任务,以便取消异步构造可导致取消这些任务。

如果 lambda 或函数对象的主体返回一个结果(并且不是 task<TResult>),则将在运行时隐式为其创建的任务上下文中在过程 MTA 内异步执行 lambda。 IAsyncInfo::Cancel 方法将导致取消隐式任务。

如果 lambda 的主体返回一个任务,则 lamba 将通过声明 lambda 采用类型为 cancellation_token 的参数,以内联方式执行,您可以通过在创建任务时将此标记传入,从而触发对在 lambda 中创建的任何任务的取消。 您还可对此标记使用 register_callback 方法,以使运行时在您对产生的异步操作或行为调用 IAsyncInfo::Cancel 时调用回调。

此函数只能用于 Windows 应用商店应用。

要求

**标头:**pplxtasks.h

**命名空间:**pplx

请参见

参考

pplx 命名空间

task 类

progress_reporter 类

其他资源

cancelation_token Class