예제 #1
0
 private void ExcecutionDone <TResponse>(BaseCommand <TResponse> command, CommandResult <TResponse> commandResult, CommandExecutionEventType eventType)
 {
     commandResult.SignalExecutionDone(eventType);
     this.eventPublisher.Publish(new CommandExecutedEvent(command.CommandKey, commandResult));
 }
예제 #2
0
        private Task <CommandResult <TResponse> > Execute <TResponse>(IObservable <TResponse> observable, BaseCommand <TResponse> command, CommandResult <TResponse> commandResult)
        {
            TaskCompletionSource <CommandResult <TResponse> > tcs = new TaskCompletionSource <CommandResult <TResponse> >();

            try
            {
                AnonymousObserver <TResponse> observer =
                    new AnonymousObserver <TResponse>(
                        _ => { },
                        _ => tcs.TrySetResult(commandResult),
                        () => tcs.TrySetResult(commandResult));

                observable.Subscribe(observer);
            }
            catch (Exception ex)
            {
                this.OnExecutionException(command, commandResult, ex);
                tcs.TrySetResult(commandResult);
            }

            return(tcs.Task);
        }
예제 #3
0
        private IObservable <TResponse> WithTimeout <TResponse>(BaseCommand <TResponse> command, IObservable <TResponse> observable)
        {
            TimeSpan timeout = TimeSpan.FromMilliseconds(command.CommandProperties.ExecutionTimeoutMilliseconds);

            return(observable.Timeout(timeout));
        }