/// <summary>
 /// Should the caller retry the operation.
 /// </summary>
 /// <param name="cosmosResponseMessage"><see cref="CosmosResponseMessage"/> in return of the request</param>
 /// <param name="cancellationToken"></param>
 /// <returns>True indicates caller should retry, False otherwise</returns>
 public Task <ShouldRetryResult> ShouldRetryAsync(
     CosmosResponseMessage cosmosResponseMessage,
     CancellationToken cancellationToken)
 {
     return(this.ShouldRetryAsyncInternal(cosmosResponseMessage?.StatusCode,
                                          cosmosResponseMessage?.Headers.SubStatusCode,
                                          cosmosResponseMessage?.GetResourceAddress(),
                                          () => this.nextRetryPolicy.ShouldRetryAsync(cosmosResponseMessage, cancellationToken)));
 }
        /// <summary>
        /// Should the caller retry the operation.
        /// </summary>
        /// <param name="cosmosResponseMessage"><see cref="CosmosResponseMessage"/> in return of the request</param>
        /// <param name="cancellationToken"></param>
        /// <returns>True indicates caller should retry, False otherwise</returns>
        public Task <ShouldRetryResult> ShouldRetryAsync(
            CosmosResponseMessage cosmosResponseMessage,
            CancellationToken cancellationToken)
        {
            ShouldRetryResult shouldRetryResult = this.ShouldRetryInternal(cosmosResponseMessage?.StatusCode,
                                                                           cosmosResponseMessage?.Headers.SubStatusCode,
                                                                           cosmosResponseMessage?.GetResourceAddress());

            if (shouldRetryResult != null)
            {
                return(Task.FromResult(shouldRetryResult));
            }

            return(this.nextRetryPolicy.ShouldRetryAsync(cosmosResponseMessage, cancellationToken));
        }