boostorg / cobalt

Coroutines for C++20 & asio
https://www.boost.org/doc/libs/master/libs/cobalt/doc/html/index.html
230 stars 25 forks source link

Request, create empty promise object that can be set later outside of a coroutine. #203

Open sandercm opened 2 months ago

sandercm commented 2 months ago

Hi,

I was wondering if it would be possible to add a method that would set a coroutine object from the "outside". For example

boost::cobalt::promise<std::string> request;
// save the promise somewhere in a data struct
// ....
// recieve some network data
// match it with a request
request.set(data);

this would then resume any coroutine that is currently co_awaited on this promise. I found a way around this by using async channels but was wondering if it would be at all possible to do this without them?

klemens-morgenstern commented 2 months ago

It is not, that's what channels are for.