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(); } }