שעון עצר יכול להפסיק להמתין בזמן שבקשת ה-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.

מאמרים קשורים