C++ winrt 温特:开火,然后忘记,这是做什么的?

C++ winrt 温特:开火,然后忘记,这是做什么的?,c++-winrt,c++-coroutine,C++ Winrt,C++ Coroutine,我正在将C++/CX应用程序移植到C++/WinRT核心应用程序 我在这个链接中找到了一个有用的示例代码(Simple3DGameDX) 它的挂起方法的返回类型是winrt::fire\u和\u-forget。 但在C++/CX中的另一个示例中,其挂起方法的返回类型是void 为什么此返回类型在C++/WinRT中不是void? 这有什么用 C++/WinRT winrt::fire_and_forget OnSuspending(IInspectable const& /* send

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

我在这个链接中找到了一个有用的示例代码(Simple3DGameDX)

它的挂起方法的返回类型是winrt::fire\u和\u-forget。 但在C++/CX中的另一个示例中,其挂起方法的返回类型是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)
温特:开火,然后忘记,这是做什么的

请参阅

有时,您有一个可以与其他工作同时完成的任务,您不需要等待该任务完成(没有其他工作依赖于它),也不需要它返回值。在这种情况下,你可以放下任务,忘掉它。您可以通过编写一个返回类型为(而不是Windows运行时异步操作类型或concurrency::task)的协程来实现这一点

为什么此返回类型在C++/WinRT中不是void?这有什么用

除了的文档外,请注意以下几点:函数本身在其主体中使用运算符

这要求函数本身是协同程序友好的,并且可以编译成“无堆栈”形式,以便异步执行
void
返回类型不起作用,但是
fire\u and\u forget
struct是可以的,因为C++/WinRT为它定义了协程处理,如文档所述


可以将其视为
void
,它可以是异步的,不需要等待。

如果您熟悉C#,fire#u and#u forget就像C#中的“async void”一样作为返回类型。该方法不返回任务,但您可以在其中“等待…”。如果答案已解决您的问题,请将其视为已接受