টাস্ক <> এবং ইনট এর মধ্যে কি অন্তর্নিহিত রূপান্তর ঘটে?
নাঃ। এটি কীভাবে async
/ await
কাজ করে তার একটি অংশ ।
হিসাবে ঘোষিত যে কোনও পদ্ধতিতে এর async
রিটার্ন টাইপ থাকতে হবে:
void
(সম্ভব হলে এড়ানো)
Task
(সমাপ্তি / ব্যর্থতার বিজ্ঞপ্তির বাইরে কোনও ফল নেই)
Task<T>
( T
একটি অ্যাসিঙ্ক পদ্ধতিতে টাইপের যৌক্তিক ফলাফলের জন্য )
সংকলক সমস্ত উপযুক্ত মোড়ক করে। মুল বক্তব্যটি হ'ল আপনি অবিচ্ছিন্নভাবে ফিরে যাচ্ছেন urlContents.Length
- আপনি পদ্ধতিটি কেবল ফিরে আসতে পারবেন না int
, কারণ এটি await
ইতিমধ্যে সম্পূর্ণ না হওয়া প্রথম এক্সপ্রেশনকে আঘাত করলে আসল পদ্ধতিটি ফিরে আসবে । সুতরাং পরিবর্তে, এটি একটি ফিরে আসে Task<int>
যা অ্যাসিঙ্ক পদ্ধতিটি নিজেই সম্পূর্ণ হয়ে যায় complete
লক্ষ্য করুন await
তার বিপরীত কাজ করে - এটা unwraps একটি Task<T>
একটি থেকে T
মান, কীভাবে এই লাইন কাজ করে:
string urlContents = await getStringTask;
... তবে অবশ্যই এটি অবিচ্ছিন্নভাবে আবদ্ধ হয়, যেখানে Result
টাস্ক শেষ না হওয়া অবধি কেবল ব্যবহার বন্ধ হয়ে যাবে। ( await
অপেক্ষাকৃত নিদর্শন প্রয়োগ করে এমন অন্যান্য ধরণের মোড়ক উন্মোচন করতে পারে তবে Task<T>
আপনি সম্ভবত এটি ব্যবহার করতে পারেন))
এই দ্বৈত মোড়ক / আন-র্যাপিং হ'ল যা অ্যাসিঙ্ককে এত কমপোজযোগ্য হতে দেয়। উদাহরণস্বরূপ, আমি আর একটি অ্যাসিঙ্ক পদ্ধতি লিখতে পারলাম যা আপনাকে কল করে এবং ফলাফলটি দ্বিগুণ করে:
public async Task<int> AccessTheWebAndDoubleAsync()
{
var task = AccessTheWebAsync();
int result = await task;
return result * 2;
}
(বা সহজভাবে return await AccessTheWebAsync() * 2;
অবশ্যই।)
async
কীওয়ার্ডের উপর ভিত্তি করে সেটির যত্ন নেয় ।