استخدم CancellationToken واحدًا لرؤوس .NET HttpClient ومتنه
مرّر CancellationToken الخاص بالطلب عبر إعداد استجابة HttpClient وقراءة المتن معًا، بدلًا من قياس انتظار المستدعي وحده.
يمكن لساعة الإيقاف أن تتوقف عن الانتظار بينما يستمر طلب HTTP. وفّر الإلغاء للعملية نفسها عندما تكون لمحاولة الوكيل ميزانية مقصودة.
في تطبيق .NET حديث يملك HttpClient مهيأً للوكيل:
using var budget = new CancellationTokenSource(TimeSpan.FromSeconds(5));
using var response = await client.GetAsync(
targetUrl,
HttpCompletionOption.ResponseHeadersRead,
budget.Token);
response.EnsureSuccessStatusCode();
string body = await response.Content.ReadAsStringAsync(budget.Token);
تبدأ الميزانية نفسها قبل الإعداد وتبقى نشطة أثناء قراءة المتن. يعيد ResponseHeadersRead التحكم بعد الرؤوس، لذا لا يحدد مهلة الإكمال الخاصة بـHttpClient وحدها ميزانية قراءة المتن اللاحقة.
أبقِ الإلغاء منفصلًا عن حالة HTTP وأخطاء النقل. قد يأتي OperationCanceledException من الرمز الممنوح أو من مهلة أخرى مهيأة؛ افحص مصدر الإلغاء المنطبق بدلًا من الإبلاغ عن كل فشل كأنه وكيل ميت.
أعد استخدام العميل الذي يملك مسار الوكيل هذا. لا يلزم أن يعني إلغاء محاولة إعادة بناء مجمع اتصالات كامل لكل طلب لاحق.
يخزّن المثال متن استجابة محدود. ينبغي لتنزيل متدفق أن يمرّر الرمز عبر حلقة نسخ التدفق ويحرّر الاستجابة في كل مسار خروج.
يعبّر الإلغاء عن سياسة تشغيل، لا عن وعد دقيق بساعة الحائط لكل إجراء أساسي في المنصة. تجنّب استبداله بحلقة استقصاء لا نهائية على Task.IsCompleted.