using (WebResponse response = request.GetResponse())
{
    response.GetResponseStream().CopyTo(destination);
}

أبقِ كل استجابة HttpWebRequest قديمة داخل نطاق يُكمل استهلاكها ويحرّرها. هنا destination هو مجرى الخرج القابل للكتابة في التطبيق؛ ويحرّر كتلة using الكائن WebResponse حتى لو فشل النسخ، دون أن تتولى ملكية ذلك الخرج.

نجاح طلب وكيل واحد وانتظار الطلبات اللاحقة قد يدل على استجابات غير مكتملة تشغل موارد الاتصال. مجرد تلقي WebResponse لا يُنهي جسمه. مهلة الطلب تحدّ من مدة الانتظار، لا من عمر كل استجابة تم الحصول عليها بالفعل.

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

التحرير يطلق موارد الاستجابة لكنه لا يضمن اتصالات قابلة لإعادة الاستخدام في كل حالة. البروتوكول والخادم واستهلاك الجسم ما زالت مهمة.

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

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