Rho tasks represent one eventual value, while Rho streams represent an
asynchronous sequence of typed stream items. Effectful callers compose
tasks with rho_then() or coroutines and block only at rho_await().
Details
rho_new_state() and the concrete adapter task classes are exported for
packages implementing new async backends. Polling actions return one of the
typed RhoPollDecision subclasses; timing remains inside rho.async.
rho_serial_queue() orders asynchronous actions without blocking the event
loop. Cancelling a queued task removes only that entry; cancelling active
work propagates to the task returned by its action.