본문 바로가기

프로그래밍언어/C#

[C#] 동시성 프로그래밍_ 지수 백오프(exponential backoff)

- 재시도 사이의 대기 시간을 점진적으로 늘리는 전략

- 웹 서비스 관련 작업에 사용하면 서버가 재시도로 넘치지 않게 막을 수 있다. 

 

public static async Task<string> GetRequestHttpWithRetries() {
	//1초 후, 다음에는 2초 후, 다음에는 4초 후 재시도
    TimeSpan nextDelay = TimeSpan.FromSeconds(1);
    HttpClient client = new HttpClient();
    string url = "http://www.naver.com";

    for (int i = 0; i != 3; i++) {
        try {
            var result = await client.GetStringAsync(url);
            Console.WriteLine(string.Format("time: {0}, result: {1}", nextDelay, result));
            return result;
        }
        catch { 

        }

        await Task.Delay(nextDelay);
        nextDelay = nextDelay + nextDelay;
    }

    return await client.GetStringAsync(url);
}