您能在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包装器,它会忽略结果——如果需要等待结果,则需要使用不同的返回类型。