chriskohlhoff / asio

Asio C++ Library
http://think-async.com/Asio
4.81k stars 1.2k forks source link

co_await promise(use_awaitable) return wrong value #1275

Open hn-sl opened 1 year ago

hn-sl commented 1 year ago

I expected co_await promise(asio::use_awaitable) to return "hello" but it returns empty string.

#include <cassert>
#include <asio.hpp>
#include <asio/use_awaitable.hpp>
#include <asio/experimental/promise.hpp>
#include <asio/experimental/use_promise.hpp>

asio::awaitable<std::string> f() {
    co_return "hello";
}

asio::awaitable<void> test(asio::io_context &io) {
    auto promise = co_spawn(io, f(), asio::experimental::use_promise);
    auto result = co_await promise(asio::use_awaitable); // result is empty string
    assert(result == "hello"); // assertion failed
}

int main() {
    asio::io_context io;
    co_spawn(io, test(io), asio::detached);
    io.run();
    return 0;
}

I tested on latest asio version (1.27.0)