What I have realized for myself is that if one expects lot of data-flow from zillion of different directions, zippings, mergings, unzippings, re-zippings etc. transformations on those data flows, then Rx will do what it's good for. Buf if Rx is just used for simple data flow transformations and mostly used as multithreading substitute for callback hell, then Coroutines will be better.
Especially it's interesting to look into Coroutines channels/actors and that fancy stuff, which might turn out to be better choice... at the end of the day there is only one good advice "Use your brain"