2019年6月25日 星期二

指數退避

  1. 指數退避是一種重試策略,重試的延遲時間會逐 次增加。在訪問 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); 
}

沒有留言:

張貼留言