Timeout Yönetimi¶
Timeout, uygulamalarda uzun süreli işlemleri sınırlamak ve kullanıcı deneyimini korumak için önemli bir stratejidir. Polly, işlemlerinizde zaman aşımı kontrolü için etkili bir çözüm sunar.
1. Temel Timeout Yönetimi¶
❌ Yanlış Kullanım: Timeout kontrolü olmadan uzun süre beklemek.
await MakeHttpRequestAsync(); // Potansiyel olarak sonsuza kadar bekleyebilir
✅ İdeal Kullanım: Polly ile zaman aşımı kontrolü ekleyin.
var timeoutPolicy = Policy
.TimeoutAsync(TimeSpan.FromSeconds(5));
await timeoutPolicy.ExecuteAsync(() => MakeHttpRequestAsync());
2. Timeout ve Retry Kombinasyonu¶
Timeout ve Retry politikalarını birleştirerek hem işlemi belirli bir süreyle sınırlayabilir hem de hata durumunda tekrar deneme yapabilirsiniz.
✅ Örnek:
var retryPolicy = Policy
.Handle<HttpRequestException>()
.WaitAndRetryAsync(3, retryAttempt => TimeSpan.FromSeconds(retryAttempt));
var timeoutPolicy = Policy
.TimeoutAsync(TimeSpan.FromSeconds(5));
var combinedPolicy = Policy.WrapAsync(retryPolicy, timeoutPolicy);
await combinedPolicy.ExecuteAsync(() => MakeHttpRequestAsync());
3. CancellationToken ile Timeout Yönetimi¶
Polly, CancellationToken
ile entegre çalışarak işlemleri iptal etmenizi sağlar.
✅ Örnek:
var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
var timeoutPolicy = Policy
.TimeoutAsync(TimeSpan.FromSeconds(10));
await timeoutPolicy.ExecuteAsync(
async token => await MakeHttpRequestAsync(token),
cts.Token);
4. Performans ve İzleme¶
- Loglama: Timeout durumlarını izlemek için log ekleyin.
- Uyarlanabilir Süreler: Farklı işlemler için farklı timeout süreleri belirleyin.
✅ Örnek:
var timeoutPolicy = Policy
.TimeoutAsync(TimeSpan.FromSeconds(5), (context, timespan, task) =>
{
Console.WriteLine($"Timeout after {timespan.TotalSeconds} seconds.");
return Task.CompletedTask;
});
await timeoutPolicy.ExecuteAsync(() => MakeHttpRequestAsync());