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

প্রতিটি পুরোনো HttpWebRequest প্রতিক্রিয়া এমন একটি পরিসরে রাখুন যা এটির গ্রহণ সম্পূর্ণ করে এবং মুক্তি দেয়। এখানে destination হলো অ্যাপ্লিকেশনের লেখনযোগ্য আউটপুট স্ট্রিম; কপি ব্যর্থ হলেও using ব্লকটি WebResponse মুক্তি দেয়, ওই আউটপুটের মালিকানা না নিয়েই।

একটি প্রক্সি অনুরোধ সফল হওয়া এবং পরেরগুলি অপেক্ষা করা অসম্পূর্ণ প্রতিক্রিয়ার সংযোগ-সম্পদ দখলের ইঙ্গিত দিতে পারে। শুধু WebResponse গ্রহণ করলেই তার বডি শেষ হয় না। অনুরোধের সময়সীমা অপেক্ষাকে সীমিত করে, ইতিমধ্যে পাওয়া প্রতিটি প্রতিক্রিয়ার জীবনকালকে নয়।

ত্রুটিতেও একই মালিকানা প্রয়োগ করুন। একটি WebException এমন প্রতিক্রিয়া বহন করতে পারে যা আপনার কোড পরীক্ষা করে; পরীক্ষার পরে এটি বন্ধ করুন। পরিবহন ব্যর্থতায় কোনো প্রতিক্রিয়াই নাও থাকতে পারে।

নিষ্পত্তি প্রতিক্রিয়ার সম্পদ মুক্তি দেয়, কিন্তু প্রতিটি ক্ষেত্রে পুনর্ব্যবহারযোগ্য সংযোগের প্রতিশ্রুতি দেয় না। প্রোটোকল, সার্ভার ও বডি গ্রহণ এখনও গুরুত্বপূর্ণ।

এটি পুরোনো WebRequest স্ট্যাকের রক্ষণাবেক্ষণ সম্পর্কিত। নতুন কোডে প্রকৃত ক্লায়েন্টের প্রতিক্রিয়া/স্ট্রিম মালিকানা অনুসরণ করুন; HttpClient-এর জন্য প্রতিক্রিয়াগুলি তাদের নিষ্পত্তি পরিসরে রাখুন, এবং এই পরিষ্কার-ব্যর্থতাকে প্রক্সি প্রমাণীকরণ বা পথ নির্বাচন থেকে আলাদাভাবে চিহ্নিত করুন।

সম্পর্কিত নিবন্ধ