你怎么能在 C++/WinRT lambda 中 `co_await`?
How can you `co_await` in a C++/WinRT lambda?
你能在 C++/WinRT TimerElapsedHandler(或 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
如何编写异步处理程序?
您只需要提供一个异步 return 类型。例如,-> winrt::fire_and_forget
:
auto pointerExitedTimerHandler = winrt::TimerElapsedHandler([](const winrt::ThreadPoolTimer&) -> winrt::fire_and_forget
{
co_await 5s;
// Other stuff...
});
Fire and forget 是忽略结果的异步函数的简单 WinRT 包装器——如果您需要等待结果,则需要使用不同的 return 类型。
你能在 C++/WinRT TimerElapsedHandler(或 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
如何编写异步处理程序?
您只需要提供一个异步 return 类型。例如,-> winrt::fire_and_forget
:
auto pointerExitedTimerHandler = winrt::TimerElapsedHandler([](const winrt::ThreadPoolTimer&) -> winrt::fire_and_forget
{
co_await 5s;
// Other stuff...
});
Fire and forget 是忽略结果的异步函数的简单 WinRT 包装器——如果您需要等待结果,则需要使用不同的 return 类型。