change semantics of read with block: read _all_ cached instead of _any_ cached before waiting
simplify example