আমি একই প্রশ্নটি মাথায় রেখে এই হোঁচট খেয়েছি, তবুও প্রতিক্রিয়াগুলি পড়ার পরে প্রশ্নটি দীর্ঘায়িত বলে মনে হচ্ছে, "হুডের নীচে জাদু" এর উল্লেখ দ্বারা বিভ্রান্ত।
উল্লিখিত অ্যাসিক্রোনাস প্রোগ্রামিং থেকে :
async
শব্দ একটি ASYNC পদ্ধতি, যা আপনি ব্যবহার করতে পারবেন মধ্যে একটি পদ্ধতি সক্রিয় await
তার শরীরে শব্দ।
- যখন
await
শব্দ প্রয়োগ করা হয়, এটি আহ্বান পদ্ধতি স্থগিত এবং উৎপাদনের তার আহ্বানকারী ফিরে নিয়ন্ত্রণ পর্যন্ত প্রতীক্ষিত কাজটি সম্পূর্ণ।
await
কেবল কোনও async
পদ্ধতির অভ্যন্তরে ব্যবহার করা যেতে পারে ।
প্রসঙ্গটি যে মুখোমুখি হয় await
তা কী অবরুদ্ধ হয়ে যায়?
- হ্যাঁ । মৃত্যুদন্ড কার্যকর করার প্রসঙ্গে একটি পরিচিত রাষ্ট্র বজায় রাখতে এটি মূলত স্থানীয় সিঙ্ক বাধা; অন্যান্য বিষয়গুলি ব্যতীত, যদি কোনও হয়, যোগদান করা হয় না।
অ্যাপ্লিকেশন বাকি কি এ ব্লক করে await
?
এটি আপনার অ্যাপ্লিকেশন কীভাবে লিখিত হয় তার উপর নির্ভর করে। যদি এটি await
একই প্রসঙ্গে ধারাবাহিকভাবে চালু করা নির্ভরশীল এড কার্যগুলির একটি সিরিজ হয় (দেখুন: কিছু async বোঝার চেষ্টা করছেন / আচরণের জন্য অপেক্ষা করুন )
await asyncCall1();
await asyncCall2(); // waits for asyncCall1() to complete
এইভাবে প্রতিটি await
পরেরটির spawning ব্লক করবে।
অন্যদিকে, সমান্তরালে চালু করা একই নির্ভরশীল কাজগুলি সমান্তরালে সম্পাদন করবে এবং প্রসঙ্গটি কেবল শ্রদ্ধায় অবরুদ্ধ হবে। await
:
Task<int> t1 = asyncCall1();
Task<string> t2 = asyncCall2(); // runs in parallel with asyncCall1()
int val = await t1;
string str = await t2; // waits for asyncCall1() to complete
সাধারণভাবে, await
বহিরাগত প্রেক্ষাপটে ফলন পাওয়া যায়, যেখান থেকে বর্তমান প্রসঙ্গে বলা হয়। যাইহোক, যদি বাহ্যিক প্রসঙ্গটি নিজেই বর্তমানের জন্য অপেক্ষা করে থাকে তবে এটি await
একই প্রসঙ্গে একটি অনুক্রমের মতো ।
সুতরাং, async
সুবিধাগুলি কাটাতে , একাধিক সমান্তরাল প্রসঙ্গ (ইউআই, ডেটা-ক্লায়েন্ট ইত্যাদি) চালানোর জন্য অ্যাপ্লিকেশনটি ডিজাইন করা দরকার, তারপরে await
একটি প্রসঙ্গে অন্য প্রসঙ্গে প্রযোজ্যতা পাওয়া যায়, সুতরাং পুরো অ্যাপ্লিকেশনটি কোনও ব্যক্তির উপর অবরুদ্ধ হয় না await
।