winrt::fire_and_forget,这是做什么的?

winrt::fire_and_forget, What does this do?

我正在将 C++/CX 应用程序移植到 C++/WinRT 核心应用程序。

我在 link.

找到了有用的示例代码 (Simple3DGameDX)

https://github.com/microsoft/Windows-universal-samples/tree/master/Samples/Simple3DGameDX/cppwinrt

并且它的 Suspending 方法的 return 类型是 winrt::fire_and_forget。 但是 C++/CX 中的另一个例子,它的 Suspending 方法的 return 类型是 void.

为什么这个 return 类型在 C++/WinRT 中不是无效的? 这是做什么的?

C++/WinRT

winrt::fire_and_forget OnSuspending(IInspectable const& /* sender */, SuspendingEventArgs const& args)

C++/CX

void OnSuspending(Object^ Sender, SuspendingEventArgs^ Args)

winrt::fire_and_forget, What does this do?

请参考文档here,

有时候,你有一个任务可以与其他工作同时完成,你不需要等待那个任务完成(没有其他工作依赖于它),你也不需要需要它 return 一个值。在那种情况下,您可以关闭任务并忘记它。您可以通过编写 return 类型为 winrt::fire_and_forget 的协程(而不是 Windows 运行时异步操作类型之一或 concurrency::task)来实现。

why this return type is not void in C++/WinRT? and What does this do?

除了正文中 Fire and forget, note the following: the function itself uses co_await 运算符的文档。

这要求函数本身是协程友好的,并且可以编译成“无堆栈”形式,以便异步执行。 void return 类型不起作用,但 fire_and_forget 结构没问题,因为 C++/WinRT 定义了它的协程处理,如文档所述。

将此视为 void,它可以是异步的,无需等待。