Exemplo n.º 1
0
        public Task <IDisposable> Subscribe(TCriteria criteria,
                                            Action <TActionArg> onNextAction, Action <Exception> errorAction)
        {
            var block = new InQueueBlock <TCriteria, TActionArg>(criteria, onNextAction, errorAction);

            var disposable = new FridayDisposable(() => { block.MarkBlockAsNonUsable(); });

            lock (actualBlocks)
                actualBlocks.Add(block);

            return(Task.FromResult <IDisposable>(disposable));
        }
Exemplo n.º 2
0
        public IDisposable AddSubscriber(Action <TNextArg> onNextAction, Action <Exception> errorAction)
        {
            var ssi = new SingleSubscriberInfo <TNextArg>(
                new ReactiveActions <TNextArg>(onNextAction, errorAction));

            var d = new FridayDisposable(() => { UnsubscribeSingleClient(ssi); });

            lock (this)
            {
                subscribers.Add(ssi);
            }

            return(d);
        }
Exemplo n.º 3
0
        public async Task <IDisposable> Subscribe(TCriteria criteria, Action <TNextArg> onNextAction, Action <Exception> errorAction)
        {
            if (blocks.TryGetValue(criteria, out var block))
            {
                return(block.AddSubscriber(onNextAction, errorAction));
            }


            var newBlock = blocks.GetOrAdd(criteria, new GenericSubscribersCriteriaBlock <TCriteria, TNextArg>(criteria));


            var realSubscription = await SubscribeInternal(criteria, newBlock.ProcessNext, newBlock.ProcessError).ConfigureAwait(false);

            var subscription = new FridayDisposable(() =>
            {
                blocks.TryRemove(criteria, out _);
                realSubscription.Dispose();
            });


            newBlock.SetRealSubscription(subscription);
            return(newBlock.AddSubscriber(onNextAction, errorAction));
        }
Exemplo n.º 4
0
 public static IDisposable ToDisposable(this System.Action a)
 {
     return(FridayDisposable.Create(a));
 }