All your remarks make perfectly sense.
However, the problem lies not with the loop round robin.
When one leaves out loop.create_task(update_lcd(data_ready)), only leaving loop.create_task(sample(data_ready)), the round robin behaves perfectly fine.
It is only when starting to await an Event in update_lcd(data_ready) that things get out of control.
I only started meddling with MicroPython for Unix because it happens to be the recommended route to install uasyncio on MCU platforms that are lacking internet connectivity.
I figured it would equally be a nice way to run a few quick experiments before implementing these on the Pyboard or ESP32. Honestly, I am a bit shocked that even the simplest of uasyncio experiments got me, as a beginner, caught up into this.
On the other hand, code portability to other platforms has its merits besides quick prototyping; it is a sign of language maturity and gives the developer confidence that his/her code is performing well.
I do not wish to influence one way or another, but I have to admit that some of that confidence has gone now. I just would like to implement uasyncio with eventually a GUI and a number of background processes, but right now, I am not sure that what I am doing is right.