alibaba / async_simple

Simple, light-weight and easy-to-use asynchronous components
Apache License 2.0
1.64k stars 246 forks source link

how to adapt to callback style API #368

Open microcai opened 7 months ago

microcai commented 7 months ago

the referenced document says to use

async_xxx(param, callbackhandler)

to

co_await async_xxx(param);

but, that kind of refactoring only works with asio.

we have some old lib that accepts callbacks. now I want to call that old lib function and "co_await" for the callback to be invoked.

hint: I warpped the Executor for the old lib, so the old lib and async_simple runs in the same Executor. I need a way to convert "lazy<>" to some old style callbacks. and let that callback to resume the calling lazy<>

ChuanqiXu9 commented 7 months ago

but, that kind of refactoring only works with asio.

This is not true. At least not "only".

we have some old lib that accepts callbacks. now I want to call that old lib function and "co_await" for the callback to be invoked.

I didn't understand where the blocker it. Could you explain your question in detail?

chloro-pn commented 7 months ago

You need to implement awaiter for your asynchronous operation, refer to this demo and coroutine reference

RainMark commented 7 months ago

And we can use Future/Promise, call promise setValue in callback, and co_await future in Lazy

refer to https://github.com/alibaba/async_simple/blob/main/async_simple/coro/test/FutureAwaiterTest.cpp