C++/WinRT 在 main() 中使用 co_await
C++/WinRT using co_await in main()
在 Windows Console Application (C++/WinRT)
项目中,入口点就是标准的 int main()
函数。
那我如何开始使用异步代码?
比如我要调用一个方法
winrt::Windows::Foundation::IAsyncAction WriteToFileAsync()
{
// calls FileIO::WriteTextAsync etc
}
来自 main
.
co_await
不能用,即
int main()
{
winrt::init_apartment();
co_await ::WriteToFileAsync();
}
产生错误
function "main" cannot be a coroutine
我应该使用
int main()
{
winrt::init_apartment();
::WriteToFileAsync().get();
}
代替?
一般有没有更好的方法?
根据 C++ 标准的规定,main()
函数不能是 coroutine。如果函数使用 co_await
运算符或 co_yield
和 co_return
关键字,则它是协程。
因此,您将不得不等待从 main()
函数调用的任何协程 运行 完成。 C++/WinRT 为 IAsyncAction
(和系列)提供了扩展函数 get()
和 wait_for()
。
我不知道有什么“更好”,虽然我也不明白为什么调用 get()
很糟糕。
在 Windows Console Application (C++/WinRT)
项目中,入口点就是标准的 int main()
函数。
那我如何开始使用异步代码?
比如我要调用一个方法
winrt::Windows::Foundation::IAsyncAction WriteToFileAsync()
{
// calls FileIO::WriteTextAsync etc
}
来自 main
.
co_await
不能用,即
int main()
{
winrt::init_apartment();
co_await ::WriteToFileAsync();
}
产生错误
function "main" cannot be a coroutine
我应该使用
int main()
{
winrt::init_apartment();
::WriteToFileAsync().get();
}
代替?
一般有没有更好的方法?
根据 C++ 标准的规定,main()
函数不能是 coroutine。如果函数使用 co_await
运算符或 co_yield
和 co_return
关键字,则它是协程。
因此,您将不得不等待从 main()
函数调用的任何协程 运行 完成。 C++/WinRT 为 IAsyncAction
(和系列)提供了扩展函数 get()
和 wait_for()
。
我不知道有什么“更好”,虽然我也不明白为什么调用 get()
很糟糕。