make the `read` method totally asynchronous