如何在C++/WinRT lambda中"co-await"



您能在C++/WinRT TimerLapsedHandler(或C++/WinRT中的任何其他lambda(中co_await吗?

当我尝试编译这样的代码时:

auto pointerExitedTimerHandler = winrt::TimerElapsedHandler([](const winrt::ThreadPoolTimer&)
{
co_await 5s;
// Other stuff...
});

我得到一个错误:

error C7588: A definition of a class template std::experimental::task must be provided for the return type of this coroutine to be deduced

如何编写异步处理程序?

免责声明:我在微软工作

您只需要提供一个异步返回类型。例如,-> winrt::fire_and_forget:

auto pointerExitedTimerHandler = winrt::TimerElapsedHandler([](const winrt::ThreadPoolTimer&) -> winrt::fire_and_forget
{
co_await 5s;
// Other stuff...
});

Fire and forget是一个用于异步函数的简单WinRT包装器,它会忽略结果——如果需要等待结果,则需要使用不同的返回类型。

最新更新