public void ctor_コンストラクタで渡したErrorがSourceErrorで取得できる()
    {
        var err = new Error();
        var ex  = new ResultErrorException(err);

        ex.SourceError.Should().Be(err);
    }
    public void ctor2_コンストラクタで渡したメッセージがMessageに設定される()
    {
        var message = "Exception Message";
        var ex      = new ResultErrorException(new Error("Foo"), message);

        ex.Message.Should().Be(message);
    }
示例#3
0
        public static Task <ResultEx <TResult> > ThenTryAsync <TValue, TError, TResult>(this ResultGeneric <TValue, TError> result,
                                                                                        Func <TValue, Task <ResultGeneric <TResult, TError> > > func)
        {
            if (result.IsError)
            {
                return(Task.FromResult(ResultEx <TResult> .FromError(ResultErrorException.FromError(result.Error))));
            }

            try
            {
                return(func(result.Value).ContinueWith(task => task.Result.ToResultEx(),
                                                       TaskContinuationOptions.DenyChildAttach | TaskContinuationOptions.ExecuteSynchronously));
            }
            catch (Exception e)
            {
                return(Task.FromResult(ResultEx <TResult> .FromError(e)));
            }
        }
示例#4
0
        public static Task <ResultEx <TResult> > ThenTryAsync <TValue, TError, TResult>(this ResultGeneric <TValue, TError> result, Func <TValue, Task <TResult> > func)
        {
            if (result.IsError)
            {
                return(Task.FromResult(ResultEx <TResult> .FromError(ResultErrorException.FromError(result.Error))));
            }

            try
            {
                return(func(result.Value)
                       .ContinueWith(task => task.IsFaulted
                            ? ResultEx <TResult> .FromError(task.Exception.TryFlattenAggregateException())
                            : ResultEx <TResult> .FromValue(
                                         task.Result), CancellationToken.None,
                                     TaskContinuationOptions.DenyChildAttach | TaskContinuationOptions.ExecuteSynchronously, TaskScheduler.Default));
            }
            catch (Exception e)
            {
                var exception = (e as AggregateException)?.GetBaseException() ?? e;
                return(Task.FromResult(ResultEx <TResult> .FromError(exception)));
            }
        }
示例#5
0
        public static Task <ResultEx <TResult> > ThenTryAsync <TValue, TError, TResult>(this Task <ResultGeneric <TValue, TError> > resultTask,
                                                                                        Func <TValue, Task <TResult> > func, TaskScheduler scheduler = null)
        {
            return(resultTask.ContinueWith((task, f) =>
            {
                var result = task.Result;
                if (result.IsError)
                {
                    return Task.FromResult(ResultEx <TResult> .FromError(ResultErrorException.FromError(result.Error)));
                }

                try
                {
                    return ((Func <TValue, Task <TResult> >)f)(task.Result.Value)
                    .ContinueWith(t => ResultEx.FromValue(t.Result), TaskContinuationOptions.ExecuteSynchronously);
                }
                catch (Exception e)
                {
                    return Task.FromResult(ResultEx <TResult> .FromError(e));
                }
            }, func, CancellationToken.None, TaskContinuationOptions.DenyChildAttach,
                                           scheduler ?? TaskScheduler.Default).Unwrap());
        }