Example #1
0
        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);
        }
Example #2
0
        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();
            }
        }
Example #3
0
 public void Publish(PromiseInvocation invocation)
 {
     _subjectActions.OnNext(invocation);
 }