দ্রুত শিখার জন্য ..
পদ্ধতি নির্বাহের প্রবাহটি (একটি চিত্র সহ) বুঝতে: 3 মিনিট
প্রশ্ন অন্তঃকরণ (শেখার জন্য): 1 মিনিট
সিনট্যাক্স চিনির মাধ্যমে দ্রুত পান: 5 মিনিট
একজন বিকাশকারীর বিভ্রান্তি ভাগ করুন: 5 মিনিট
সমস্যা: দ্রুত অ্যাসিঙ্ক কোড: 2 মিনিট স্বাভাবিক কোডের একটি বাস্তব-বিশ্বের বাস্তবায়ন পরিবর্তন করুন
এখন কোথায়?
পদ্ধতি নির্বাহের প্রবাহটি (একটি চিত্র সহ) বুঝতে: 3 মিনিট
এই চিত্রটিতে, কেবলমাত্র # 6 এ ফোকাস করুন (আরও কিছু নয়)
# Step ধাপে: কাজ শেষ হয়ে গেছে বলে এখানে কার্যকর করা বন্ধ হয়ে গেছে। চালিয়ে যেতে এর জন্য getStringTask (কোনও ফাংশনের ধরণ) থেকে ফলাফল দরকার। সুতরাং, await
এটির অগ্রগতি স্থগিত করার জন্য এবং একজন কলকারীকে নিয়ন্ত্রণ ফিরিয়ে (ফলন) দেওয়ার জন্য (আমরা এই পদ্ধতির মধ্যে আছি) এটি অপারেটর ব্যবহার করে । GetStringTask- এ আসল কলটি আগে # 2 এ হয়েছিল। # 2 এ একটি স্ট্রিং ফলাফল ফেরত দেওয়ার প্রতিশ্রুতি দেওয়া হয়েছিল। তবে ফলাফল কখন ফিরিয়ে দেবে? আমাদের কি (# 1: এক্সেস দ্য ওয়েবেএেন্সিক) আবার ২ য় কল করা উচিত? ফলাফলটি কে পেয়েছে, # 2 (কলিং স্টেটমেন্ট) বা # 6 (বিবৃতিটির অপেক্ষায়)
এক্সেস দ্য ওয়েবেএেন্সিক () এর বাহ্যিক কলারও এখন অপেক্ষা করছে। সুতরাং কলার অ্যাক্সেস দ্য ওয়েবেএেন্সিকের জন্য অপেক্ষা করছে এবং এই মুহুর্তে অ্যাক্সেস দ্য ওয়েবেএসিঙ্ক অপেক্ষা করছে স্টেটআরসিএনসিঙ্কের জন্য। মজার বিষয় হ'ল অ্যাক্সেস দ্য ওয়েবেএেন্সেক অপেক্ষা করার আগে সময় বাঁচানোর জন্য অপেক্ষা (# 4) করার আগে কিছু কাজ করেছিল। মাল্টিটাস্কে একই স্বাধীনতা বহিরাগত কলার (এবং চেইনের সমস্ত কলার) এর জন্যও উপলব্ধ এবং এটি এই 'অ্যাসিঙ্ক' জিনিসটির বৃহত্তম প্লাস! আপনার কাছে মনে হচ্ছে এটি সিঙ্ক্রোনাস..আর স্বাভাবিক তবে এটি হয় না।
মনে রাখবেন, পদ্ধতিটি ইতিমধ্যে ফিরে এসেছিল (# 2), এটি আর ফিরে আসতে পারে না (দ্বিতীয়বার নয়)। তাহলে কলকারী কীভাবে জানতে পারবে? এটি সবই টাস্ক সম্পর্কে ! টাস্ক পাস হয়েছিল। কার্যটির জন্য অপেক্ষা করা হয়েছিল (পদ্ধতি নয়, মান নয়)। টাস্কে মান নির্ধারণ করা হবে। কার্য স্থিতি সম্পূর্ণ করতে সেট করা হবে। কলার কেবল টাস্ক (# 6) পর্যবেক্ষণ করে। 6 / # উত্তরটি কোথায় / কে ফলাফল পায় তার উত্তর। আরও পরে এখানে পড়ুন ।
শেখার জন্য প্রশ্ন অন্তঃকরণ: 1 মিনিট
আসুন প্রশ্নটি কিছুটা সামঞ্জস্য করুন:
কিভাবে এবং কখন ব্যবহার করবেন এবং ? async
await
Tasks
কারণ শেখা Task
স্বয়ংক্রিয়ভাবে অন্য দুটি কভার করে (এবং আপনার প্রশ্নের উত্তর দেয়)
সিনট্যাক্স চিনির মাধ্যমে দ্রুত পান: 5 মিনিট
রূপান্তর করার আগে (মূল পদ্ধতি)
internal static int Method(int arg0, int arg1)
{
int result = arg0 + arg1;
IO(); // Do some long running IO.
return result;
}
উপরের পদ্ধতিটি কল করার জন্য একটি টাস্ক-আইয়েড পদ্ধতি
internal static Task<int> MethodTask(int arg0, int arg1)
{
Task<int> task = new Task<int>(() => Method(arg0, arg1));
task.Start(); // Hot task (started task) should always be returned.
return task;
}
আমরা কি অপেক্ষা বা অ্যাসিঙ্ক উল্লেখ করেছি? না। উপরের পদ্ধতিটি কল করুন এবং আপনি একটি টাস্ক পান যা আপনি নিরীক্ষণ করতে পারেন। আপনি ইতিমধ্যে জানেন যে টাস্কটি কী দেয় ... একটি পূর্ণসংখ্যা।
কোনও টাস্ককে কল করা কিছুটা মুশকিল এবং যখন কীওয়ার্ডগুলি প্রদর্শিত শুরু হয় appear আসুন মেথডটাস্ক ()
internal static async Task<int> MethodAsync(int arg0, int arg1)
{
int result = await HelperMethods.MethodTask(arg0, arg1);
return result;
}
উপরের একই কোডটি নীচের চিত্র হিসাবে যুক্ত হয়েছে:
- আমরা 'অপেক্ষার' কাজটি শেষ হওয়ার জন্য। অত: পর
await
- যেহেতু আমরা প্রতীক্ষা ব্যবহার করি তাই আমাদের অবশ্যই ব্যবহার করতে হবে
async
(বাধ্যতামূলক সিনট্যাক্স)
Async
উপসর্গ হিসাবে কোড পদ্ধতিতে সিঙ্ক করুন (কোডিং স্ট্যান্ডার্ড)
await
বুঝতে সহজ তবে বাকি দুটি ( async
, Async
) নাও থাকতে পারে :)। ঠিক আছে, যদিও এটি সংকলকটির কাছে আরও অনেক কিছু বোঝা উচিত Fএর জন্য পরে এখানে পড়ুন
সুতরাং 2 অংশ আছে।
- 'টাস্ক' তৈরি করুন
- টাস্কটি কল করতে সিনট্যাকটিক চিনি তৈরি করুন (
await+async
)
মনে রাখবেন, অ্যাক্সেস দ্য ওয়েলবায়েন্সিক () এর জন্য আমাদের একটি বাহ্যিক কলার ছিল এবং সেই কলারটিকেও রেহাই দেওয়া যায় না ... অর্থাৎ এটিরও এটির প্রয়োজন await+async
। এবং শৃঙ্খলা অব্যাহত আছে। তবে সর্বদা Task
এক প্রান্তে থাকবে।
ঠিক আছে, তবে একজন বিকাশকারী # 1 (টাস্ক) অনুপস্থিত দেখে অবাক হয়েছেন ...
একজন বিকাশকারীর বিভ্রান্তি ভাগ করুন: 5 মিনিট
একজন বিকাশকারী বাস্তবায়ন না করার ভুল করেছে Task
তবে এটি এখনও কার্যকর হয় ! প্রশ্নটি বোঝার চেষ্টা করুন এবং এখানে প্রদত্ত কেবল স্বীকৃত উত্তর । আশা করি আপনি পড়েছেন এবং পুরোপুরি বুঝতে পেরেছেন। সংক্ষিপ্তসারটি হ'ল আমরা 'টাস্ক' দেখতে বা প্রয়োগ করতে পারি না তবে এটি কোনও অভিভাবক শ্রেণিতে কোথাও প্রয়োগ করা হয়। তেমনিভাবে আমাদের উদাহরণটিতে ইতিমধ্যে নির্মিত বলে কল MethodAsync()
করা একটি Task
( MethodTask()
) আওয়ারফুলের সাথে সেই পদ্ধতিটি প্রয়োগ করার চেয়ে সহজ । বেশিরভাগ বিকাশকারীকে Tasks
একটি কোডকে অ্যাসিঙ্ক্রোনাসে রূপান্তর করার সময় মাথা ঘুরে বেড়াতে অসুবিধা হয় ।
টিপ: অসুবিধা আউটসোর্স করার জন্য একটি বিদ্যমান এসিঙ্ক বাস্তবায়ন (যেমন MethodAsync
বা ToListAsync
) সন্ধান করার চেষ্টা করুন । সুতরাং আমাদের কেবল অ্যাসিঙ্কের সাথে ডিল করতে হবে এবং অপেক্ষা করতে হবে (এটি সহজ এবং সাধারণ কোডের সাথে বেশ সমান)
সমস্যা: দ্রুত অ্যাসিঙ্ক অপারেশনে সাধারণ কোডের বাস্তব-বাস্তবায়ন পরিবর্তন করুন: 2 মিনিট
ডেটা লেয়ারের নীচে দেখানো কোড লাইনটি ভেঙে যেতে শুরু করেছে (অনেকগুলি স্থান)। কারণ আমরা .NET ফ্রেমওয়ার্ক 4.2। * থেকে। নেট কোর থেকে আমাদের কিছু কোড আপডেট করেছি। আমাদের পুরো অ্যাপ্লিকেশন জুড়ে 1 ঘন্টার মধ্যে এটি ঠিক করতে হয়েছিল!
var myContract = query.Where(c => c.ContractID == _contractID).First();
সহজ কিছু!
- আমরা এন্টিফ্রেমওয়ার্ক নুগেট প্যাকেজটি ইনস্টল করেছি কারণ এটিতে ক্যুরিয়েবল এক্সটেনশন রয়েছে। বা অন্য কথায় এটি অ্যাসিঙ্ক বাস্তবায়ন (টাস্ক) করে, তাই আমরা সহজ
Async
এবং await
কোড সহ বেঁচে থাকতে পারি ।
- নেমস্পেস = মাইক্রোসফ্ট.এনটিটি ফ্রেমওয়ার্ককোর
কলিং কোড লাইন এর মত বদলে গেল
var myContract = await query.Where(c => c.ContractID == _contractID).FirstAsync();
পদ্ধতি স্বাক্ষর থেকে পরিবর্তিত হয়েছে
Contract GetContract(int contractnumber)
প্রতি
async Task<Contract> GetContractAsync(int contractnumber)
কলিং পদ্ধতিটিও প্রভাবিত GetContractAsync(123456);
হয়েছিল : হিসাবে বলা হয়েছিলGetContractAsync(123456).Result;
আমরা 30 মিনিটের মধ্যে এটিকে সর্বত্র পরিবর্তন করেছি!
কিন্তু স্থপতি আমাদের কেবল এটির জন্য এন্টি ফ্রেমওয়ার্ক লাইব্রেরি ব্যবহার না করার জন্য বলেছিলেন! ওহো! নাটক! তারপরে আমরা একটি কাস্টম টাস্ক বাস্তবায়ন করেছি (ইউক)। যা আপনি জানেন কিভাবে। তবুও সহজ! .. এখনও ইউক ..
এখন কোথায়? এএসপি.নেট কোর-এ সিঙ্ক্রোনাস কলগুলি অ্যাসিঙ্ক্রোনাসে রূপান্তর করার
বিষয়ে আমরা দেখতে পেলাম একটি দুর্দান্ত দ্রুত ভিডিও রয়েছে , সম্ভবত এটি পড়ার পরে যে দিকে যেতে পারে সম্ভবত।