আপডেট: ASP.NET কোর একটি নেইSynchronizationContext
। আপনি যদি এএসপি.নেট কোরে থাকেন তবে আপনি ব্যবহার করেন ConfigureAwait(false)
বা না করেন তা বিবেচ্য নয়।
ASP.NET "পূর্ণ" বা "ক্লাসিক" বা যাই হোক না কেন, এই উত্তরটির বাকি অংশ এখনও প্রযোজ্য।
মূল পোস্ট (নন-কোর এএসপি.এনইটি জন্য):
এএসপি.এনইটি টিমের এই ভিডিওটিতে এএসপি.এনইটি ব্যবহারের সর্বোত্তম তথ্য রয়েছে async
।
আমি পড়েছিলাম এটি থ্রেড প্রসঙ্গগুলি মূল থ্রেড প্রসঙ্গে ফিরে যেতে হবে না কারণ এটি আরও অভিনয়যোগ্য।
এটি ইউআই অ্যাপ্লিকেশনগুলির সাথে সত্য, যেখানে কেবলমাত্র একটি ইউআই থ্রেড রয়েছে যা আপনাকে "সিঙ্ক" করতে হবে।
এএসপি.এনইটি-তে পরিস্থিতি কিছুটা জটিল। যখন কোনও async
পদ্ধতি সম্পাদন পুনরায় চালু করে, তখন এটি ASP.NET থ্রেড পুল থেকে একটি থ্রেড ধরে। যদি আপনি ব্যবহার করে প্রসঙ্গ ক্যাপচারটি অক্ষম করেন ConfigureAwait(false)
তবে থ্রেডটি কেবল সরাসরি পদ্ধতিটি চালানো চালিয়ে যায়। আপনি যদি প্রসঙ্গ ক্যাপচারটি অক্ষম না করেন তবে থ্রেডটি অনুরোধ প্রসঙ্গে পুনরায় প্রবেশ করবে এবং তারপরে পদ্ধতিটি চালিয়ে যাওয়া চালিয়ে যাবে।
সুতরাং ConfigureAwait(false)
আপনাকে এএসপি.নেটে কোনও থ্রেড জাম্প বাঁচায় না; এটি আপনাকে অনুরোধ প্রসঙ্গে পুনরায় প্রবেশের সংরক্ষণ করতে পারে না, তবে এটি সাধারণত খুব দ্রুত। আপনি যদি কোনও অনুরোধের সামান্য পরিমাণে সমান্তরাল প্রক্রিয়াকরণ করার চেষ্টা করছেন তবে দরকারী ConfigureAwait(false)
হতে পারে, তবে সত্যিই টিপিএল those পরিস্থিতিতে বেশিরভাগ ক্ষেত্রেই আরও ভাল ফিট।
তবে, এএসপি.এনইটি ওয়েব অপির সাহায্যে, যদি আপনার অনুরোধটি একটি থ্রেডে আসে এবং আপনি কোনও ফাংশনের জন্য অপেক্ষা করেন এবং কনফিগারআউইট (মিথ্যা) কল করেন যা আপনি আপনার এপিসিআরএনটোলার ফাংশনের চূড়ান্ত ফলাফলটি ফিরিয়ে দিলে আপনাকে সম্ভবত অন্য কোনও থ্রেডে রাখতে পারে call ।
প্রকৃতপক্ষে, কেবল একটি করছেন এটি await
করতে পারে। আপনার async
পদ্ধতিটি হিট হয়ে গেলে await
, পদ্ধতিটি অবরুদ্ধ থাকে তবে থ্রেড থ্রেড পুলে ফিরে আসে। পদ্ধতিটি চালিয়ে যাওয়ার জন্য প্রস্তুত হলে, থ্রেড পুল থেকে যে কোনও থ্রেড ছিনিয়ে নেওয়া হয় এবং পদ্ধতিটি পুনরায় শুরু করতে ব্যবহৃত হয়।
একমাত্র পার্থক্য ConfigureAwait
এএসপি.নেটে যে পদ্ধতিটি পুনরায় শুরু করার সময় সেই থ্রেডটি অনুরোধের প্রসঙ্গে প্রবেশ করে কিনা।
আমার এমএসডিএন নিবন্ধেSynchronizationContext
এবং আমার async
ইন্ট্রো ব্লগ পোস্টে আমার আরও পটভূমি তথ্য রয়েছে ।
HttpContext.Current
এএসপি.এনইটি দ্বারা প্রবাহিত হয়SynchronizationContext
, যা আপনি যখন ডিফল্টরূপে প্রবাহিত হনawait
তবে তা প্রবাহিত হয় নাContinueWith
। OTOH, ফাঁসি প্রসঙ্গ (নিরাপত্তা সীমাবদ্ধতা সহ) প্রসঙ্গ মাধ্যমে C # এর CLR উল্লেখ করা হয়, এবং এটি করা হয় উভয় দ্বারা নির্গতContinueWith
এবংawait
(এমনকি যদি আপনি ব্যবহারConfigureAwait(false)
)।