Ejemplo n.º 1
0
        public virtual Task<SignalResult> Subscribe(TimeSpan timeout, CancellationToken cancellationToken, params string[] eventKeys)
        {
            var tcs = new TaskCompletionSource<SignalResult>();
            var timerKey = Guid.NewGuid().ToString();

            var signalAction = new SafeHandleEventAndSetResultAction(SignalBus, tcs, timerKey, eventKeys);

            foreach (var eventKey in eventKeys)
            {
                SignalBus.AddHandler(eventKey, signalAction.Handler);
            }

            if (cancellationToken != CancellationToken.None)
            {
                cancellationToken.Register(signalAction.SetCanceled);
            }

            var timer = new Timer(signalAction.SetTimedOut,
                        null,
                        timeout,
                        timeout);

            _timers.TryAdd(timerKey, timer);

            return tcs.Task;
        }
Ejemplo n.º 2
0
        public virtual Task <SignalResult> Subscribe(TimeSpan timeout, CancellationToken cancellationToken, params string[] eventKeys)
        {
            var tcs      = new TaskCompletionSource <SignalResult>();
            var timerKey = Guid.NewGuid().ToString();

            var signalAction = new SafeHandleEventAndSetResultAction(SignalBus, tcs, timerKey, eventKeys);

            foreach (var eventKey in eventKeys)
            {
                SignalBus.AddHandler(eventKey, signalAction.Handler);
            }

            if (cancellationToken != CancellationToken.None)
            {
                cancellationToken.Register(signalAction.SetCanceled);
            }

            var timer = new Timer(signalAction.SetTimedOut,
                                  null,
                                  timeout,
                                  timeout);

            _timers.TryAdd(timerKey, timer);

            return(tcs.Task);
        }
Ejemplo n.º 3
0
 public TimeoutInfo(SafeHandleEventAndSetResultAction signalAction,
                    DateTime subscriptionTime,
                    TimeSpan timeout)
 {
     SignalAction      = signalAction;
     _timeOut          = timeout;
     _subscriptionTime = subscriptionTime;
 }
Ejemplo n.º 4
0
        public virtual Task <SignalResult> Subscribe(TimeSpan timeout, CancellationToken cancellationToken, params string[] eventKeys)
        {
            var tcs = new TaskCompletionSource <SignalResult>();

            var signalAction = new SafeHandleEventAndSetResultAction(SignalBus, tcs, eventKeys, timeout);

            foreach (var eventKey in eventKeys)
            {
                SignalBus.AddHandler(eventKey, signalAction.Handler);
            }

            if (cancellationToken != CancellationToken.None)
            {
                cancellationToken.Register(signalAction.SetCanceled);
            }

            _signalActions.Add(signalAction);

            // Make sure the timer that checks for Subscription timeouts is running
            EnsureTimeoutTimer();

            return(tcs.Task);
        }
Ejemplo n.º 5
0
 public TimeoutInfo(SafeHandleEventAndSetResultAction signalAction,
                    DateTime subscriptionTime,
                    TimeSpan timeout)
 {
     SignalAction = signalAction;
     _timeOut = timeout;
     _subscriptionTime = subscriptionTime;
 }
Ejemplo n.º 6
0
        public virtual Task<SignalResult> Subscribe(TimeSpan timeout, CancellationToken cancellationToken, params string[] eventKeys)
        {
            var tcs = new TaskCompletionSource<SignalResult>();

            var signalAction = new SafeHandleEventAndSetResultAction(SignalBus, tcs, eventKeys, timeout, action => _signalActions.Remove(action));

            foreach (var eventKey in eventKeys)
            {
                SignalBus.AddHandler(eventKey, signalAction.Handler);
            }

            if (cancellationToken != CancellationToken.None)
            {
                cancellationToken.Register(signalAction.SetCanceled);
            }

            _signalActions.Add(signalAction);

            // Make sure the timer that checks for Subscription timeouts is running
            EnsureTimeoutTimer();

            return tcs.Task;
        }