سياسات إعادة المحاولة
أعيدوا محاولة العمليات عند الإخفاقات المؤقتة مع التراجع التدريجي
سياسات إعادة المحاولة درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 4 دروس في المجموع.
ما هي Polly؟
Polly هي مكتبة مرونة لـ .NET تساعد تطبيقاتكم على التعامل مع حالات الفشل المؤقتة والاستجابات البطيئة والاعتماديات المحمّلة بأكثر من طاقتها. وهي توفر استراتيجيات مثل إعادة المحاولة، وقاطع الدائرة، والمهلة الزمنية، والبديل الاحتياطي، وتحديد معدل الطلبات.
تستخدم هذه الدورة Polly v8، أي واجهة برمجة التطبيقات Polly.Core.
dotnet add package Polly.Coreلماذا نعيد المحاولة؟
تكون حالات فشل كثيرة مؤقتة: اضطراب قصير في الشبكة، أو انتهاء مهلة عابر، أو إعادة تشغيل خدمة. وغالبًا ما تنجح إعادة تنفيذ العملية بعد لحظات، من دون إزعاج المستخدم.
يجب أن تستهدف إعادة المحاولة الأخطاء المؤقتة فقط، وألا تُستخدم مطلقًا مع الأخطاء الدائمة مثل 404.
استراتيجية أساسية لإعادة المحاولة
في Polly v8، تنشئون ResiliencePipeline باستخدام RetryStrategyOptions. وبشكل افتراضي، يؤدي الاستثناء المُلقى إلى إعادة المحاولة.
using Polly;
using Polly.Retry;
var pipeline = new ResiliencePipelineBuilder()
.AddRetry(new RetryStrategyOptions
{
MaxRetryAttempts = 3
})
.Build();التنفيذ عبر خط الأنابيب
غلّفوا الاستدعاء المعرّض للخطر باستخدام ExecuteAsync. تنفّذه Polly، وإذا ألقى استثناءً، تعيد المحاولة حتى العدد المُهيأ.
await pipeline.ExecuteAsync(async token =>
{
await httpClient.GetAsync("https://api.example.com/data", token);
});تحديد ما تجب إعادة محاولته
استخدموا ShouldHandle مع منشئ مسند لإعادة المحاولة عند استثناءات أو نتائج محددة فقط، وتجنب إعادة المحاولة عند الأخطاء الدائمة.
new RetryStrategyOptions<HttpResponseMessage>
{
ShouldHandle = new PredicateBuilder<HttpResponseMessage>()
.Handle<HttpRequestException>()
.HandleResult(r => r.StatusCode == HttpStatusCode.ServiceUnavailable),
MaxRetryAttempts = 3
};التراجع الثابت أم الأسي
قد تؤدي إعادة المحاولة فورًا إلى زيادة الضغط على خدمة متعثرة. يوزّع التراجع التدريجي المحاولات على فترات زمنية. تدعم Polly التراجع الثابت والخطي والأسي عبر إعداد BackoffType.
التراجع الأسي
يضاعف التراجع الأسي مدة التأخير مع كل محاولة، مثلًا: 2s و4s و8s. اضبطوا BackoffType.Exponential مع قيمة أساسية لـ Delay.
new RetryStrategyOptions
{
MaxRetryAttempts = 4,
BackoffType = DelayBackoffType.Exponential,
Delay = TimeSpan.FromSeconds(2)
};إضافة العشوائية
إذا أعاد عدد كبير من العملاء المحاولة وفق الجدول نفسه، فسيُنشئون زيادات متزامنة في الضغط، تُعرف باسم «تدافع القطيع». تضيف العشوائية تفاوتًا إلى مدد التأخير. فعّلوا UseJitter = true.
new RetryStrategyOptions
{
MaxRetryAttempts = 4,
BackoffType = DelayBackoffType.Exponential,
Delay = TimeSpan.FromSeconds(1),
UseJitter = true
};التفاعل مع كل إعادة محاولة
يتيح استدعاء OnRetry تسجيل المحاولات أو إصدار المقاييس. ويتلقى رقم المحاولة وحالة الفشل التي تسببت فيها.
new RetryStrategyOptions
{
MaxRetryAttempts = 3,
OnRetry = args =>
{
Console.WriteLine($"Retry {args.AttemptNumber} after {args.RetryDelay}");
return default;
}
};تحديد إجمالي مدة إعادة المحاولة
قد تؤدي إعادة المحاولة بلا حدود إلى إبقاء المستخدم منتظرًا مدة طويلة جدًا. ادمجوا إعادة المحاولة مع استراتيجية مهلة زمنية، التي سنغطيها لاحقًا، أو حدّدوا عدد المحاولات حتى تفشل العملية بسرعة عندما يكون التعافي غير مرجح.
إعادة المحاولة مع HttpClient
بالنسبة إلى استدعاءات HTTP، سجّلوا معالج مرونة على HttpClient لتطبيق إعادة المحاولة تلقائيًا على كل طلب.
builder.Services.AddHttpClient("api")
.AddResilienceHandler("retry", pipeline =>
{
pipeline.AddRetry(new HttpRetryStrategyOptions
{
MaxRetryAttempts = 3,
BackoffType = DelayBackoffType.Exponential
});
});تحقق سريع
اختبروا معرفتكم بإعادة المحاولة.
مراجعة
تتعامل سياسات إعادة المحاولة مع حالات الفشل المؤقتة من خلال إعادة تنفيذ العملية. في Polly v8، تنشئون خط أنابيب باستخدام AddRetry، وتحددون نطاقه باستخدام ShouldHandle، وتباعدون بين المحاولات باستخدام BackoffType.Exponential مع UseJitter. استخدموا OnRetry لمراقبة المحاولات، وسجّلوا معالج مرونة لحماية كل استدعاء لـ HttpClient.
الأسئلة الشائعة
هل درس «سياسات إعادة المحاولة» مجاني؟
نعم — نص درس «سياسات إعادة المحاولة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 4 دروس في المجموع.
ماذا ستتعلم في «سياسات إعادة المحاولة»؟
أعيدوا محاولة العمليات عند الإخفاقات المؤقتة مع التراجع التدريجي تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟
لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «سياسات إعادة المحاولة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟
نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- سياسات إعادة المحاولة
- نمط قاطع الدائرة
- سياسات المهلة والقيم البديلة
- مسارات المرونة