مرّر المهلة إلى العملية القادرة على إلغاء عمل الشبكة. لـHttpClient مهيّأ عبر وسيط في .NET:

using var deadline = new CancellationTokenSource(TimeSpan.FromSeconds(20));
using var response = await client.GetAsync(uri, deadline.Token);

يوفّر التطبيق client وuri. تتلقّى هذه التحميلة الزائدة رمز الإلغاء؛ أما مهلة حول انتظار مهمته فلن تحدّ إلا من انتظار ذلك المستدعي. واستقصاء علم الإكمال فيه المشكلة نفسها: قد ينصرف المستدعي بينما تبقى المقابس والعمال مشغولة.

يتبع الإلغاء تنفيذ العميل ومسار التنظيف. وهو لا يضمن توقّف كل إجراء منخفض المستوى عند تعليمة محدّدة. اسمح لذلك المسار بالانتهاء وتخلّص من الموارد التي تملكها العملية. أدرِج قراءة الجسم المنضبطة بشكل منفصل في التصميم؛ ولعملية ResponseHeadersRead حديثة في .NET، مرّر الرمز نفسه خلال قراءة الجسم. وتوفّر العملاء الأخرى واجهات الإلغاء والإجهاض والتنظيف الخاصة بها.

تحتاج إعادة المحاولة إلى نتيجة للمحاولة السابقة. احتفظ بمعرّفها والوسيط المختار، واطلب الإلغاء عند الحاجة، وتجنّب فقدان المهمة أثناء بدء بدائل بلا نهاية. وإلا فقد تتراكم الأعمال على نقطة نهاية بطيئة أسرع مما يحرّرها التطبيق.

تحتاج النتيجة البعيدة إلى معالجة منفصلة. فقد يكون الوجهة قد تلقّى إرسالًا بالفعل عند وقوع الإلغاء. استخدم سياسة الاستعادة أو منع التكرار في التطبيق؛ فإيقاف العمل المحلي لا يلغي إجراءً بعيدًا.

مقالات ذات صلة