public object Call(ChaosInvocation chaosInvocation) { var promise = new PromiseInvocation() { Invocation = chaosInvocation }; Publish(promise); if (!promise.Wait(_config.WaitTimeout)) { throw new TimeoutException(); } if (promise.Exception != null) { throw promise.Exception; } return(promise.Result); }
protected void ProcessAction(PromiseInvocation promiseInvocation) { try { var resp = _chaosClient.Send(promiseInvocation.Invocation); promiseInvocation.Result = resp; if (promiseInvocation.Invocation.IsReturnTask) { var returnType = _typeFinder.Find(promiseInvocation.Invocation.ReturnTypeFullName); var taskFromResult = DynamicMethod.GetTaskFromResult(returnType); promiseInvocation.Result = taskFromResult(resp); } promiseInvocation.Resolve?.Invoke(); promiseInvocation.WaitEvent.Set(); } catch (Exception ex) { promiseInvocation.Exception = ex; promiseInvocation.Reject?.Invoke(ex); promiseInvocation.WaitEvent.Set(); } }
public void Publish(PromiseInvocation invocation) { _subjectActions.OnNext(invocation); }