private async Task <Stream> DownloadHashedMediaResourceAsync(IMediaResourceDownloadRequest request, CancellationToken cancelToken = default(CancellationToken))
        {
            var cryptor = await this.GetCredentialsCryptorAsync(cancelToken);

            MediaItemUrlBuilder urlBuilder = new MediaItemUrlBuilder(
                this.restGrammar,
                this.webApiGrammar,
                this.sessionConfig,
                this.mediaSettings,
                request.ItemSource);

            var    hashUrlGetterFlow = new GetMediaContentHashTask(urlBuilder, this.httpClient, cryptor);
            string hashedMediaUrl    = await RestApiCallFlow.LoadRequestFromNetworkFlow(request, hashUrlGetterFlow, cancelToken);

            try
            {
                Stream result = await this.httpClient.GetStreamAsync(hashedMediaUrl);

                return(result);
            }
            catch (Exception ex)
            {
                throw new LoadDataFromNetworkException(TaskFlowErrorMessages.NETWORK_EXCEPTION_MESSAGE, ex);
            }
        }
    private async Task<Stream> DownloadHashedMediaResourceAsync(IMediaResourceDownloadRequest request, CancellationToken cancelToken = default(CancellationToken))
    {
      var cryptor = await this.GetCredentialsCryptorAsync(cancelToken);

      MediaItemUrlBuilder urlBuilder = new MediaItemUrlBuilder(
        this.restGrammar,
        this.webApiGrammar,
        this.sessionConfig,
        this.mediaSettings,
        request.ItemSource);

      var hashUrlGetterFlow = new GetMediaContentHashTask(urlBuilder, this.httpClient, cryptor);
      string hashedMediaUrl = await RestApiCallFlow.LoadRequestFromNetworkFlow(request, hashUrlGetterFlow, cancelToken);

      try
      {
        Stream result = await this.httpClient.GetStreamAsync(hashedMediaUrl);
        return result;
      }
      catch (Exception ex)
      {
        throw new LoadDataFromNetworkException(TaskFlowErrorMessages.NETWORK_EXCEPTION_MESSAGE, ex);
      }
    }