private void ExcecutionDone <TResponse>(BaseCommand <TResponse> command, CommandResult <TResponse> commandResult, CommandExecutionEventType eventType) { commandResult.SignalExecutionDone(eventType); this.eventPublisher.Publish(new CommandExecutedEvent(command.CommandKey, commandResult)); }
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); }
private IObservable <TResponse> WithTimeout <TResponse>(BaseCommand <TResponse> command, IObservable <TResponse> observable) { TimeSpan timeout = TimeSpan.FromMilliseconds(command.CommandProperties.ExecutionTimeoutMilliseconds); return(observable.Timeout(timeout)); }