টাস্ক <> এবং ইনট এর মধ্যে কি অন্তর্নিহিত রূপান্তর ঘটে?
নাঃ। এটি কীভাবে 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কীওয়ার্ডের উপর ভিত্তি করে সেটির যত্ন নেয় ।