Depois de executar este programa
std::future<int> f() {
std::cout << "enter f on thread " << std::this_thread::get_id() << std::endl;
co_return 1;
}
std::future<void> g() {
std::future<int> i = co_await std::async(f);
std::cout << "resume g on thread: " << std::this_thread::get_id() << std::endl;
co_return;
}
int main() {
std::future<void> f;
while (true) {
f = g();
std::this_thread::sleep_for(1s);
}
return 0;
}
que foi compilado com MSVC 19.43 usando a /await
opção, observei que a função f
está sempre sendo executada na mesma thread, enquanto a continuação na função g
é sempre executada em uma thread recém-criada. Também tentei chamar std::async
com std::launch::async
a opção para forçar a criação de uma nova thread, mas ainda assim a mesma thread seria usada para executar f
. Alguém pode explicar o porquê?