如何解决winrt::fire_and_forget,这是做什么的?
我正在将 C++/CX 应用程序移植到 C++/WinRT 核心应用程序。
我在此链接中找到了一个有用的示例代码 (Simple3DGameDX)。
https://github.com/microsoft/Windows-universal-samples/tree/master/Samples/Simple3DGameDX/cppwinrt
并且它的 Suspending 方法的返回类型是 winrt::fire_and_forget。 但是在 C++/CX 中的另一个例子,它的 Suspending 方法的返回类型是 void。
为什么这个返回类型在 C++/WinRT 中不是 void? 这有什么作用?
C++/WinRT
winrt::fire_and_forget OnSuspending(IInspectable const& /* sender */,SuspendingEventArgs const& args)
C++/CX
void OnSuspending(Object^ Sender,SuspendingEventArgs^ Args)
解决方法
为什么这个返回类型在 C++/WinRT 中不是 void?这有什么作用?
除了 Fire and forget 的文档外,请注意以下几点:函数本身在其主体中使用 co_await
运算符。
这要求函数本身是协程友好的,并且可以编译成“无堆栈”形式,用于异步执行。 void
返回类型不起作用,但 fire_and_forget
struct 没问题,因为 C++/WinRT 为它定义了协程处理,如文档所述。
将其视为void
,它可以是异步的,无需等待。
winrt::fire_and_forget,这是做什么的?
请参考文档here,
有时候,你有一个任务可以和其他工作同时完成,你不需要等待那个任务完成(没有其他工作依赖它),也不需要它返回一个值。在这种情况下,您可以关闭任务并忘记它。您可以通过编写返回类型为 winrt::fire_and_forget(而不是 Windows 运行时异步操作类型之一或 concurrency::task)的协程来实现这一点。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。