Beispiel #1
0
        protected override Result <(Price[], Position[])> GetInputs()
        {
            var pricesAsync    = ResultEx.TryCatchAsync(GetInputPrices);
            var positionsAsync = ResultEx.TryCatchAsync(GetInputPositions);

            var(pricesResult, positionsResult) = TaskEx.WhenAll(pricesAsync, positionsAsync).Result;
            switch (pricesResult)
            {
            case Success <Price[]> successPrice when positionsResult is Success <Position[]> positionsSuccess:
                return(new Success <(Price[], Position[])>((successPrice.Value, positionsSuccess.Value)));

            // :( it's all about failures
            case Failure <Price[]> priceFailure when positionsResult is Failure <Position[]> positionFailure:
                return(new Failure <(Price[], Position[])>(priceFailure.Reason + " " + positionFailure.Reason));

            case Failure <Price[]> failure:
                return(new Failure <(Price[], Position[])>(failure.Reason));

            case Success <Price[]> _ when positionsResult is Failure <Position[]> failure:
                return(new Failure <(Price[], Position[])>(failure.Reason));
            }

            return(new Failure <(Price[], Position[])>("ParallelAppFlow.GetInputs - Fatal error."));
        }