In a Windows Console Application (C /WinRT)
project the entry point is just the standard int main()
function.
How can I get started with asynchronous code then?
For example, I want to call a method
winrt::Windows::Foundation::IAsyncAction WriteToFileAsync()
{
// calls FileIO::WriteTextAsync etc
}
from main
.
co_await
cannot be used, i.e.
int main()
{
winrt::init_apartment();
co_await ::WriteToFileAsync();
}
yields the error
function "main" cannot be a coroutine
Am I supposed to use
int main()
{
winrt::init_apartment();
::WriteToFileAsync().get();
}
instead?
Is there a better way in general?
CodePudding user response:
As mandated by the C Standard, the main()
function cannot be a coroutine. A function is a coroutine if it uses the co_await
operator or the co_yield
and co_return
keywords.
Consequently, you will have to wait for any coroutines called from the main()
function to run to completion. C /WinRT provides the extension functions get()
and wait_for()
for IAsyncAction
(and family) to do that.
I'm not aware of anything "better", though I also don't understand why calling get()
were bad.