// wait for a tryreadasync to finish, then continue async static async ValueTask <List <T> > ReadAllAsync_ContinueAfterTryReadAsync(AsyncReader <T> self, ValueTask <ReadResult <T> > waitFor, List <T> ret, CancellationToken cancel) { var other = await waitFor; if (other.HasValue) { ret.Add(other.Value); } else { return(ret); } while (true) { var res = await self.TryReadAsync(cancel); if (res.HasValue) { ret.Add(res.Value); } else { break; } } return(ret); }
public ValueTask <bool> MoveNextAsync() { AssertNotDisposed(); var task = Reader.TryReadAsync(Token); if (task.IsCompletedSuccessfully) { var res = task.Result; if (!res.HasValue) { return(new ValueTask <bool>(false)); } Current = res.Value; return(new ValueTask <bool>(true)); } return(MoveNextAsync_ContinueAfterReadAsync(this, task, Token));