public IAsyncEnumerator <TMessage> GetAsyncEnumerator(CancellationToken cancellationToken = default) { var disposable = DisposableBag.CreateSingleAssignment(); var e = new AsyncMessageHandlerEnumerator <TMessage>(disposable, cancellationToken); var task = subscriber.SubscribeAsync(e, filters); SetDisposableAsync(task, disposable); return(e); }
public static ValueTask <IDisposable> SubscribeAsync <TMessage>(this IBufferedAsyncSubscriber <TMessage> subscriber, Func <TMessage, CancellationToken, ValueTask> handler, Func <TMessage, bool> predicate, AsyncMessageHandlerFilter <TMessage>[] filters, CancellationToken cancellationToken = default) { var predicateFilter = new AsyncPredicateFilter <TMessage>(predicate); filters = (filters.Length == 0) ? new[] { predicateFilter } : ArrayUtil.ImmutableAdd(filters, predicateFilter); return(subscriber.SubscribeAsync(new AnonymousAsyncMessageHandler <TMessage>(handler), filters, cancellationToken)); }
public static ValueTask <IDisposable> SubscribeAsync <TMessage>(this IBufferedAsyncSubscriber <TMessage> subscriber, Func <TMessage, CancellationToken, ValueTask> handler, AsyncMessageHandlerFilter <TMessage>[] filters, CancellationToken cancellationToken = default) { return(subscriber.SubscribeAsync(new AnonymousAsyncMessageHandler <TMessage>(handler), filters, cancellationToken)); }