public IAsyncEnumerator <TResult> GetAsyncEnumerator() { var subject = new ReplayAsyncEnumerable <TSource>(); IAsyncEnumerable <TResult> result; try { result = _func(subject); } catch (Exception ex) { return(new Error <TResult> .ErrorEnumerator(ex)); } var en = new MulticastEnumerator <TSource, TResult>(_source.GetAsyncEnumerator(), subject, result.GetAsyncEnumerator()); return(en); }
public IAsyncEnumerator <TResult> GetAsyncEnumerator(CancellationToken cancellationToken) { var subject = new MulticastAsyncEnumerable <TSource>(); IAsyncEnumerable <TResult> result; try { result = _func(subject); } catch (Exception ex) { return(new Error <TResult> .ErrorEnumerator(ex)); } var cts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken); var en = new MulticastEnumerator <TSource, TResult>(_source.GetAsyncEnumerator(cts.Token), subject, result.GetAsyncEnumerator(cancellationToken), cts); return(en); }