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

เก็บการตอบกลับ HttpWebRequest แบบเดิมแต่ละรายการไว้ในขอบเขตที่บริโภคจนจบและปล่อยมัน ที่นี่ destination คือสตรีมเอาต์พุตที่เขียนได้ของแอปพลิเคชัน บล็อก using จะปล่อย WebResponse แม้การคัดลอกจะล้มเหลว โดยไม่รับความเป็นเจ้าของเอาต์พุตนั้น

การที่คำขอพร็อกซีหนึ่งสำเร็จและคำขอถัดไปรออยู่ อาจบ่งชี้ว่ามีการตอบกลับที่ยังไม่จบถือทรัพยากรการเชื่อมต่ออยู่ การรับ WebResponse เท่านั้นไม่ทำให้เนื้อหาจบลง การหมดเวลาของคำขอจำกัดการรอ ไม่ใช่อายุของทุกการตอบกลับที่ได้รับแล้ว

ใช้ความเป็นเจ้าของเดียวกันกับข้อผิดพลาด WebException อาจพาการตอบกลับที่โค้ดของคุณตรวจสอบได้ ปิดมันหลังตรวจสอบ ความล้มเหลวในการขนส่งอาจไม่มีการตอบกลับเลย

การกำจัดคืนทรัพยากรของการตอบกลับ แต่ไม่ได้สัญญาว่าจะมีการเชื่อมต่อที่ใช้ซ้ำได้ในทุกกรณี โพรโทคอล เซิร์ฟเวอร์ และการบริโภคเนื้อหายังคงสำคัญ

เรื่องนี้เกี่ยวกับการบำรุงรักษาสแตก WebRequest แบบเดิม ในโค้ดใหม่กว่า ให้ทำตามความเป็นเจ้าของการตอบกลับ/สตรีมของไคลเอนต์จริง สำหรับ HttpClient เก็บการตอบกลับไว้ในขอบเขตการกำจัดของมัน และแยกความล้มเหลวในการล้างข้อมูลนี้ออกจากการพิสูจน์ตัวตนพร็อกซีหรือการเลือกเส้นทาง

บทความที่เกี่ยวข้อง