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;
}