Imperative implementation of Stream.TryAsyncRead: int -> Async<byte[] option>