private async Task <TraktPagedResponse <TResponseContentType> > QueryPagedListAsync <TResponseContentType>(ExtendedHttpRequestMessage requestMessage, CancellationToken cancellationToken = default)
        {
            HttpResponseMessage responseMessage = null;

            try
            {
                responseMessage = await ExecuteRequestAsync(requestMessage, false, cancellationToken).ConfigureAwait(false);

                DebugAsserter.AssertResponseMessageIsNotNull(responseMessage);
                DebugAsserter.AssertHttpResponseCodeIsNotExpected(responseMessage.StatusCode, HttpStatusCode.NoContent, DebugAsserter.PAGED_LIST_RESPONSE_PRECONDITION_INVALID_STATUS_CODE);
                Stream responseContentStream = await ResponseMessageHelper.GetResponseContentStreamAsync(responseMessage).ConfigureAwait(false);

                DebugAsserter.AssertResponseContentStreamIsNotNull(responseContentStream);
                IArrayJsonReader <TResponseContentType> arrayJsonReader = new ArrayJsonReader <TResponseContentType>();
                DebugAsserter.AssertArrayJsonReaderIsNotNull(arrayJsonReader);
                IEnumerable <TResponseContentType> contentObject = await arrayJsonReader.ReadArrayAsync(responseContentStream, cancellationToken).ConfigureAwait(false);

                var response = new TraktPagedResponse <TResponseContentType>
                {
                    IsSuccess = true,
                    HasValue  = contentObject != null,
                    Value     = contentObject
                };

                if (responseMessage.Headers != null)
                {
                    ResponseHeaderParser.ParsePagedResponseHeaderValues(response, responseMessage.Headers);
                }

                return(response);
            }
            catch (Exception ex)
            {
                if (_client.Configuration.ThrowResponseExceptions)
                {
                    throw;
                }

                return(new TraktPagedResponse <TResponseContentType> {
                    IsSuccess = false, Exception = ex
                });
            }
            finally
            {
                responseMessage?.Dispose();
            }
        }
        internal static async Task HandleErrorsAsync(ExtendedHttpRequestMessage requestMessage, HttpResponseMessage responseMessage,
                                                     bool isCheckinRequest               = false, bool isDeviceRequest       = false, bool isInAuthorizationPolling = false,
                                                     bool isAuthorizationRequest         = false, bool isAuthorizationRevoke = false,
                                                     CancellationToken cancellationToken = default)
        {
            if (requestMessage == null)
            {
                throw new ArgumentNullException(nameof(requestMessage));
            }

            if (responseMessage == null)
            {
                throw new ArgumentNullException(nameof(responseMessage));
            }

            string responseContent = string.Empty;

            if (responseMessage.Content != null)
            {
                responseContent = await responseMessage.Content.ReadAsStringAsync().ConfigureAwait(false);
            }

            var errorParameters = new ResponseErrorParameters
            {
                IsCheckinRequest   = isCheckinRequest,
                RequestBody        = requestMessage.RequestBodyJson,
                ResponseBody       = responseContent ?? string.Empty,
                ServerReasonPhrase = responseMessage.ReasonPhrase,
                StatusCode         = responseMessage.StatusCode,
                Url = requestMessage.Url,
                RequestObjectType        = requestMessage.RequestObjectType ?? RequestObjectType.Unspecified,
                ObjectId                 = requestMessage.ObjectId,
                SeasonNumber             = requestMessage.SeasonNumber ?? 0,
                EpisodeNumber            = requestMessage.EpisodeNumber ?? 0,
                IsDeviceRequest          = isDeviceRequest,
                IsInAuthorizationPolling = isInAuthorizationPolling,
                IsAuthorizationRequest   = isAuthorizationRequest,
                IsAuthorizationRevoke    = isAuthorizationRevoke
            };

            ResponseHeaderParser.ParsePagedResponseHeaderValues(errorParameters.Headers, responseMessage.Headers);
            await HandleErrorsAsync(errorParameters, cancellationToken).ConfigureAwait(false);
        }