💫

RetryPattern Sample

2023/05/15に公開

シンプルなリトライパターンのサンプルソースです
C#です

using System;
using System.Net.Http;
using System.Threading.Tasks;

class RetryExample
{
	private int MAX_RETRY = 3;
	static async Task Main(string[] args)
	{
		var retryExample = new RetryExample();
		await retryExample.RetryRequest();
	}

	async Task RetryRequest(int retryCount = 0)
	{
		int retryDelaySeconds = 1;

		try
		{
			// HttpClient を作成
			using (HttpClient client = new HttpClient())
			{
				// GET リクエストを送信
				HttpResponseMessage response = await client.GetAsync("https://httpbin.org/get?name=mikaze");

				// レスポンスの内容を表示
				string responseBody = await response.Content.ReadAsStringAsync();
				Console.WriteLine(responseBody);

				// リクエストが成功した場合は終了
				if (response.IsSuccessStatusCode)
				{
					Console.WriteLine("完了");
					return;
				}
			}
		}
		catch (Exception ex)
		{
			Console.WriteLine($"Error: {ex.Message}");
		}

		// リトライ回数が最大回数に達した場合は終了
		if (retryCount > MAX_RETRY)
		{
			Console.WriteLine("失敗.");
			return;
		}

		// 指定された待機時間(秒)だけ待つ
		await Task.Delay(TimeSpan.FromSeconds(retryDelaySeconds));

		// リトライ回数を増やして再帰呼び出し
		await RetryRequest(retryCount + 1);
	}
}

Discussion