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