I think i'd rather not tack the reader on here. If a messages processing function is async and needs access to the reader for `is_starved()` (or anything else) it's possible to structure the message processing function as a handler object, and capture the reader reference in that handler.

something like:

```python
class Handler(object):
    def process_message(msg):
         ...
         if self.reader.is_starved():
         ...

h = Handler()
r = Reader(all_tasks=dict(handle=h.process_message)...)
h.reader = r
r.run()
```