如何解决如何在 C++/WinRT lambda 中使用“co_await”?
您能否在 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
如何编写异步处理程序?
解决方法
您只需要提供一个异步返回类型。例如,-> winrt::fire_and_forget
:
auto pointerExitedTimerHandler = winrt::TimerElapsedHandler([](const winrt::ThreadPoolTimer&) -> winrt::fire_and_forget
{
co_await 5s;
// Other stuff...
});
Fire and forget 是一个简单的 WinRT 异步函数包装器,它会忽略结果——如果您需要等待结果,则需要使用不同的返回类型。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。