.NET HttpClient হেডার ও বডির জন্য একটি CancellationToken ব্যবহার করুন
HttpClient-এর রেসপন্স সেটআপ ও বডি পড়া—দুটির মধ্যেই অনুরোধের CancellationToken বহন করুন, শুধু কলারের অপেক্ষার সময় মেপে থামবেন না।
HTTP অনুরোধ চলতে থাকলেও স্টপওয়াচ অপেক্ষা করা বন্ধ করতে পারে। প্রক্সি প্রচেষ্টার নির্ধারিত বাজেট থাকলে অপারেশনকেই বাতিলকরণ দিন।
বিদ্যমান প্রক্সি-কনফিগার করা HttpClient সহ আধুনিক .NET অ্যাপ্লিকেশনের জন্য:
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-এর উপর অন্তহীন পোলিং লুপ দিয়ে এটি প্রতিস্থাপন করা এড়িয়ে চলুন।