- 指數退避是一種重試策略,重試的延遲時間會逐 次增加。在訪問 Web 服務時,最好的方式就是采用指數退避,它可以防止服務器被太多的重試阻塞
static async Task<string> DownloadStringWithRetries(string uri) {
using (var client = new HttpClient()) { // 第 1 次重試前等 1 秒,第 2 次等 2 秒,第 3 次等 4 秒。
var nextDelay = TimeSpan.FromSeconds(1);
for (int i = 0; i != 3; ++i) {
try {
return await client.GetStringAsync(uri);
} catch { }
await Task.Delay(nextDelay);
nextDelay = nextDelay + nextDelay;
}
// 最後重試一次,以便讓調用者知道出錯信息。
return await client.GetStringAsync(uri);
}
}
沒有留言:
張貼留言