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