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);
        }
Beispiel #2
0
        internal override IOperationResult <T> InvokeInternal(IOperationResult result)
        {
            if (_continuationAction != null)
            {
                _continuationAction.Invoke(result);
                return(OperationResult.Convert <T>(result));
            }
            if (_continuationActionGeneric != null)
            {
                IOperationResult <T> genericResult = OperationResult.Convert <T>(result);
                _continuationActionGeneric.Invoke(genericResult);
                return(genericResult);
            }
            if (_continuationFunction != null)
            {
                return(OperationResult.CreateResult(result.Operation, result.Source,
                                                    _continuationFunction.Invoke(result), result.OperationContext));
            }

            return(OperationResult.CreateResult(result.Operation, result.Source,
                                                _continuationFunctionGeneric.Invoke(OperationResult.Convert <TIn>(result)), result.OperationContext));
        }
 internal virtual IOperationResult <TResult> InvokeInternal(IOperationResult result)
 {
     return(OperationResult.Convert <TResult>(result));
 }