public static IAsyncEnumerable <TValue> Throw <TValue>(Exception exception) { if (exception == null) { throw new ArgumentNullException("exception"); } return(Create(() => Create <TValue>( ct => TaskExt.Throw <bool>(exception, ct), () => { throw new InvalidOperationException(); }, () => { }) )); }
public static IAsyncEnumerable <TResult> Generate <TState, TResult>(TState initialState, Func <TState, bool> condition, Func <TState, TState> iterate, Func <TState, TResult> resultSelector) { if (condition == null) { throw new ArgumentNullException(nameof(condition)); } if (iterate == null) { throw new ArgumentNullException(nameof(iterate)); } if (resultSelector == null) { throw new ArgumentNullException(nameof(resultSelector)); } return(CreateEnumerable( () => { var i = initialState; var started = false; var current = default(TResult); return CreateEnumerator( ct => { var b = false; try { if (started) { i = iterate(i); } b = condition(i); if (b) { current = resultSelector(i); } } catch (Exception ex) { return TaskExt.Throw <bool>(ex); } if (!b) { return TaskExt.False; } if (!started) { started = true; } return TaskExt.True; }, () => current, () => { } ); })); }