public async Task ExecuteAsync()

in src/AlibabaCloud.OSS.V2/Internal/ExecuteMiddleware.cs [244:281]


        public async Task<ResponseMessage> ExecuteAsync(RequestMessage request, ExecuteContext context)
        {
            Exception? lastError;
            var body = request.Content ?? new MemoryStream();
            var attempts = _attempts ?? context.RetryMaxAttempts;
            var bodyPos = body.CanSeek ? body.Position : 0;

            for (var i = 0; ; i++)
            {
                try
                {
                    return await _nextHandler.ExecuteAsync(request, context).ConfigureAwait(false);
                }
                catch (Exception ex)
                {
                    lastError = ex;
                }

                if (i + 1 >= attempts) break;

                if (context.ApiCallCancellationToken.IsCancellationRequested) break;

                if (!body.CanSeek) break;

                if (!_retryer.IsErrorRetryable(lastError)) break;

                // delay
                var delay = _retryer.RetryDelay(i + 1, lastError);
                await Task.Delay(delay, context.ApiCallCancellationToken).ConfigureAwait(false);
                if (context.ApiCallCancellationToken.IsCancellationRequested) break;

                //Do Reset
                body.Seek(bodyPos, SeekOrigin.Begin);
                //reset signing time
            }

            throw lastError;
        }