আমি ভেবেছিলাম যে এগুলি মূলত একই জিনিস - প্রসেসরের মধ্যে বিভক্ত কর্মসূচী লেখার (2+ প্রসেসরযুক্ত মেশিনে) writing তারপর আমি পড়া করছি এই , যা বলে:
অ্যাসিঙ্ক পদ্ধতিগুলি অ-ব্লক করা ক্রিয়াকলাপ to অ্যাসিঙ্ক পদ্ধতিতে একটি প্রতীক্ষিত অভিব্যক্তি অপেক্ষিত টাস্কটি চলাকালীন বর্তমান থ্রেডটিকে অবরুদ্ধ করে না। পরিবর্তে, ভাবটি বাকী পদ্ধতিটিকে একটি ধারাবাহিকতা হিসাবে সাইন আপ করে এবং অ্যাসিঙ্ক পদ্ধতির কলারে নিয়ন্ত্রণ ফিরিয়ে দেয়।
অ্যাসিঙ্ক এবং অপেক্ষার কীওয়ার্ডগুলির কারণে অতিরিক্ত থ্রেড তৈরি হওয়ার কারণ হয় না। অ্যাসিঙ্ক পদ্ধতিতে মাল্টিথ্রেডিংয়ের প্রয়োজন হয় না কারণ একটি অ্যাসিঙ্ক পদ্ধতিটি তার নিজস্ব থ্রেডে চালিত হয় না। পদ্ধতিটি বর্তমান সিঙ্ক্রোনাইজেশন প্রসঙ্গে চলে এবং পদ্ধতিটি সক্রিয় থাকা অবস্থায় থ্রেডে সময় ব্যবহার করে uses আপনি সিপিইউ-সুনির্দিষ্ট কাজটিকে পটভূমির থ্রেডে সরানোর জন্য টাস্ক.রুন ব্যবহার করতে পারেন, তবে একটি পটভূমি থ্রেড এমন কোনও প্রক্রিয়াতে সহায়তা করে না যা কেবল ফলাফল উপলব্ধ হওয়ার অপেক্ষা করে।
এবং আমি ভাবছি যে কেউ আমার জন্য এটি ইংরেজিতে অনুবাদ করতে পারে। এটি asyncronicity (এটি কি একটি শব্দ?) এবং থ্রেডিংয়ের মধ্যে একটি পার্থক্য আঁকবে বলে মনে হচ্ছে এবং আপনার বোঝা যাচ্ছে যে আপনার এমন একটি প্রোগ্রাম থাকতে পারে যাতে অ্যাসিঙ্ক্রোনাস টাস্ক রয়েছে তবে মাল্টিথ্রেডিং নেই।
এখন আমি পিসিতে উদাহরণ হিসাবে অ্যাসিক্রোনাস টাস্কগুলির ধারণাটি বুঝতে পারি। জোন স্কিটের সি # এর 467 , তৃতীয় সংস্করণের গভীরতায়
async void DisplayWebsiteLength ( object sender, EventArgs e )
{
label.Text = "Fetching ...";
using ( HttpClient client = new HttpClient() )
{
Task<string> task = client.GetStringAsync("http://csharpindepth.com");
string text = await task;
label.Text = text.Length.ToString();
}
}
async
শব্দ মানে হলো " এই ফাংশনটি, যখনই এটা বলা হয়, একটি প্রেক্ষাপটে যা তার সমাপ্তির সব কিছুর জন্য প্রয়োজন বোধ করা হয় তার কল বলা হবে পরে বলা হয় না হবে।"
অন্য কথায়, এটি কোনও কাজের মাঝখানে লিখতে হবে
int x = 5;
DisplayWebsiteLength();
double y = Math.Pow((double)x,2000.0);
যেহেতু DisplayWebsiteLength()
সঙ্গে কিছুই করার আছে x
বা y
, কারণ হবে DisplayWebsiteLength()
"পটভূমিতে" নিষ্পন্ন করা হবে, মত
processor 1 | processor 2
-------------------------------------------------------------------
int x = 5; | DisplayWebsiteLength()
double y = Math.Pow((double)x,2000.0); |
অবশ্যই এটি একটি মূর্খ উদাহরণ, তবে আমি কি সঠিক বা আমি সম্পূর্ণ বিভ্রান্ত বা কি?
(এছাড়াও, আমি উপরের ফাংশনটির শরীরে কেন sender
এবং e
কখনই ব্যবহৃত হয় না সে সম্পর্কে আমি বিভ্রান্ত
sender
এবং e
এটি প্রকৃতপক্ষে ইভেন্ট হ্যান্ডলার হিসাবে প্রস্তাব দিচ্ছে - এটি এমন একমাত্র জায়গা যেখানে async void
পছন্দসই। সম্ভবত, এটি একটি বোতাম ক্লিক বা এর মতো কিছুতে ডাকা হয় - ফলাফলটি হ'ল ফলশ্রুতিটি এই অ্যাপ্লিকেশনটির বাকী অংশের সাথে পুরোপুরি অযৌক্তিকভাবে ঘটে। তবে এটি এখনও সমস্ত থ্রেডে রয়েছে - ইউআই থ্রেড (একটি আইওসিপি থ্রেডে সময়ের একটি ছোট স্লিভারের সাথে যা ইউআই থ্রেডে কলব্যাক পোস্ট করে)।
DisplayWebsiteLength
কোড নমুনা: আপনি ব্যবহার করা উচিত নয় HttpClient
একটি using
বিবৃতি - একটি ভারী লোড অধীনে, কোড SocketException ত্রুটি ফলে প্রাপ্তিসাধ্য সকেট সংখ্যা এক্সস্ট পারবেন না। অনুপযুক্ত ইনস্ট্যান্টেশন সম্পর্কিত আরও তথ্য ।