public override bool MoveNext() { switch (_state) { case 1: _node = _prepended; _state = 2; goto case 2; case 2: if (_node != null) { _current = _node.Item; _node = _node.Linked; return(true); } GetSourceEnumerator(); _state = 3; goto case 3; case 3: if (LoadFromEnumerator()) { return(true); } if (_appended == null) { return(false); } _enumerator = _appended.GetEnumerator(); _state = 4; goto case 4; case 4: return(LoadFromEnumerator()); } Dispose(); return(false); }
protected override async ValueTask <bool> MoveNextCore() { switch (_state) { case AsyncIteratorState.Allocated: _mode = 1; _state = AsyncIteratorState.Iterating; goto case AsyncIteratorState.Iterating; case AsyncIteratorState.Iterating: switch (_mode) { case 1: _node = _prepended; _mode = 2; goto case 2; case 2: if (_node != null) { _current = _node.Item; _node = _node.Linked; return(true); } GetSourceEnumerator(_cancellationToken); _mode = 3; goto case 3; case 3: if (await LoadFromEnumeratorAsync().ConfigureAwait(false)) { return(true); } if (_appended != null) { _appendedEnumerator = _appended.GetEnumerator(_appendCount); _mode = 4; goto case 4; } break; case 4: if (_appendedEnumerator.MoveNext()) { _current = _appendedEnumerator.Current; return(true); } break; } break; } await DisposeAsync().ConfigureAwait(false); return(false); }
protected override async Task <bool> MoveNextCore(CancellationToken cancellationToken) { switch (state) { case AsyncIteratorState.Allocated: mode = 1; state = AsyncIteratorState.Iterating; goto case AsyncIteratorState.Iterating; case AsyncIteratorState.Iterating: switch (mode) { case 1: node = prepended; mode = 2; goto case 2; case 2: if (node != null) { current = node.Item; node = node.Linked; return(true); } GetSourceEnumerator(); mode = 3; goto case 3; case 3: if (await LoadFromEnumerator(cancellationToken) .ConfigureAwait(false)) { return(true); } if (appended != null) { appendedEnumerator = appended.GetEnumerator(); mode = 4; goto case 4; } break; case 4: if (appendedEnumerator.MoveNext()) { current = appendedEnumerator.Current; return(true); } break; } break; } Dispose(); return(false); }