public static async Task <TResult> LoadRequestFromNetworkFlow <TRequest, THttpRequest, THttpResult, TResult>(
            TRequest request,
            IRestApiCallTasks <TRequest, THttpRequest, THttpResult, TResult> stages,
            CancellationToken cancelToken)
            where TRequest : class
            where THttpRequest : class
            where THttpResult : class
            where TResult : class
        {
            THttpResult serverResponse = null;
            TResult     parsedData     = null;

            serverResponse = await RestApiCallFlow.LoadResourceFromNetworkFlow(request, stages, cancelToken);

            Func <Exception, ParserException> parseExceptionWrapper = (Exception ex) => new ParserException(TaskFlowErrorMessages.PARSER_EXCEPTION_MESSAGE, ex);
            Task <TResult> asyncParser = stages.ParseResponseDataAsync(serverResponse, cancelToken);

            parsedData = await RestApiCallFlow.IvokeTaskAndWrapExceptions(asyncParser, parseExceptionWrapper);

            if (null == parsedData)
            {
                throw new ArgumentNullException(TaskFlowErrorMessages.PARSER_RESULT_NULL_MESSAGE);
            }

            return(parsedData);
        }