আমার কাছে নিম্নলিখিত পরীক্ষার ওয়েবএপিআই কোড রয়েছে, আমি প্রোডাকশনে ওয়েবএপিআই ব্যবহার করি না তবে এই প্রশ্নটিতে আমার একটি আলোচনার কারণে আমি এটি তৈরি করেছি: ওয়েবএপিআই অ্যাসিঙ্ক প্রশ্ন
যাইহোক, এখানে আপত্তিকর ওয়েবএপিআই পদ্ধতিটি রয়েছে:
public async Task<string> Get(int id)
{
var x = HttpContext.Current;
if (x == null)
{
// not thrown
throw new ArgumentException("HttpContext.Current is null");
}
await Task.Run(() => { Task.Delay(500); id = 3; });
x = HttpContext.Current;
if (x == null)
{
// thrown
throw new ArgumentException("HttpContext.Current is null");
}
return "value";
}
আমি এখানে বিশ্বাস করেছিলাম যে দ্বিতীয় ব্যতিক্রম প্রত্যাশিত কারণ await
সম্পূর্ণ হওয়ার পরে এটি সম্ভবত অন্য থ্রেডে থাকবে যেখানে HttpContext.Current
থ্রেড-স্ট্যাটিক ভেরিয়েবল হিসাবে উপযুক্ত মানটির আর সমাধান হবে না। এখন, সিঙ্ক্রোনাইজেশন প্রসঙ্গে ভিত্তিতে, এটি অপেক্ষা করার পরে একই থ্রেডে ফিরে যেতে বাধ্য হতে পারে তবে আমি আমার পরীক্ষায় অভিনব কিছু করছি না। এটি কেবল একটি সরল, নিষ্পাপ ব্যবহার await
।
অন্য প্রশ্নের মন্তব্যে আমাকে বলা হয়েছিল যে HttpContext.Current
অপেক্ষা করার পরে সমাধান করা উচিত। এই ইঙ্গিতটি নিয়ে এই প্রশ্নটিতে আরও একটি মন্তব্য রয়েছে। তাহলে কি সত্য? সমাধান করা উচিত? আমি মনে করি না, তবে আমি এটি সম্পর্কে একটি অনুমোদনমূলক উত্তর চাই কারণ এটি যথেষ্ট নতুন async
এবং await
আমি কোনও নির্দিষ্ট কিছু খুঁজে পাচ্ছি না।
টিএল; ডিআর: একটি পরে HttpContext.Current
সম্ভবত ?null
await