public async Task <T> Please()
        {
            T   cachedResult;
            var foundInCache = _responseCache.TryGet(_requestData, out cachedResult);

            if (foundInCache)
            {
                return(cachedResult);
            }

            Response response = await Response();

            var result = _parser.Parse <T>(response);

            // set to cache only after all validation and parsing has succeeded
            _responseCache.Set(_requestData, result);

            return(result);
        }