To support asynchronous reading, we use CompeletableFuture in the reading path.
However, the reading path is too long and needs optimization. Similar works have been done in Issue #119, but we can not merge PRs on this issue, so we create a seperate issue to add this feature to master branch.