【问题标题】:Do I ever need create_async within a single-language UWP app?我是否需要在单语言 UWP 应用中使用 create_async?
【发布时间】:2018-04-10 15:08:38
【问题描述】:

我想更好地理解托管 C++(如 C++/CX)中的 PPL 任务。我不清楚的一点是使用 create_task 与 create_async。 MS 文档说:

仅当您必须创建可以从其他语言或其他 Windows 运行时组件访问的功能时才使用 create_async。当您知道操作是由同一组件中的 C++ 代码产生和消费时,直接使用任务类。”

因此,如果我只在托管 C++ UWP 应用程序中编写异步函数,那么使用 create_async 毫无意义,我最好还是只坚持使用 create_task?

【问题讨论】:

    标签: c++ task c++-cx ppl


    【解决方案1】:

    请注意,C++/CX 不是托管 C++。它们共享一些常见的语法扩展(如引用计数的“帽子”指针),但 C++/CX 是 100% 本机代码,不能在托管 CLR 运行时上运行。

    也就是说,如果您想通过公共 WinRT 接口公开异步操作,则需要使用 create_async - 无论该接口的使用者是 C++、C#、JavaScript 还是其他语言。这是因为create_async 返回一个Windows::Foundation::IAsyncAction / IAsyncOperation<T>,这是WinRT 支持的类型,并且可以被C# await 关键字使用(例如)。

    如果您只是从其他 C++ 代码直接调用您的函数(即,不通过公共 WinRT 接口),那么您不需要使用create_async

    还要注意create_asynccreate_task 做不同的事情——前者将仿函数作为异步操作运行并返回一个IAsyncFoo 以供其他WinRT 组件使用,而后者接受来自的IAsyncXyz 值另一个 WinRT 组件并在其周围包裹一个 task 对象。

    【讨论】:

      猜你喜欢
      • 2021-08-23
      • 2019-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-25
      • 2015-12-23
      • 1970-01-01
      • 2021-11-19
      相关资源
      最近更新 更多