private void Invoke(IOperationResult result) { try { _result = InvokeInternal(result); } catch (Exception e) { Tracer.Error(e.Flatten(false)); if (result.Exception != null) { e = new AggregateException(result.Exception, e); } else if (e is OperationCanceledException) { e = null; } if (e == null) { _result = OperationResult.CreateCancelResult <TResult>(result.Operation, result.Source, result.OperationContext); } else { _result = OperationResult.CreateErrorResult <TResult>(result.Operation, result.Source, e, result.OperationContext); } } finally { _waitHandle.Set(); } }
public object Invoke(IOperationResult result) { var outType = Type.GetType(OutputType, true); try { if (InputType != null) { var inType = Type.GetType(InputType, true); result = OperationResult.Convert(inType, result); } if (MainCallback != null) { object obj = MainCallback.Invoke(result); if (IsFunc) { result = OperationResult.CreateResult(outType, result.Operation, result.Source, obj, result.OperationContext); } else { result = OperationResult.Convert(outType, result); } } } catch (Exception e) { Tracer.Error(e.Flatten(false)); if (result.Exception != null) { e = new AggregateException(result.Exception, e); } else if (e is OperationCanceledException) { e = null; } if (e == null) { result = OperationResult.CreateCancelResult(outType, result.Operation, result.Source, result.OperationContext); } else { result = OperationResult.CreateErrorResult(outType, result.Operation, result.Source, e, result.OperationContext); } } finally { if (Callbacks != null) { for (int i = 0; i < Callbacks.Count; i++) { ((ISerializableCallback)Callbacks[i]).Invoke(result); } } } return(null); }