প্রথমে, আপনার সদয় কথার জন্য আপনাকে ধন্যবাদ। এটি প্রকৃতপক্ষে একটি দুর্দান্ত বৈশিষ্ট্য এবং এটির একটি ছোট অংশ হতে পেরে আমি আনন্দিত।
যদি আমার সমস্ত কোড আস্তে আস্তে অ্যাসিঙ্কটি ঘুরিয়ে নিচ্ছে, তবে কেন এটি ডিফল্টরূপে সমস্ত এ্যাসিঙ্ক তৈরি করবেন না?
ঠিক আছে, আপনি অত্যুক্তি করছেন; আপনার সমস্ত কোড async পরিণত হয় না। আপনি যখন দুটি "প্লেইন" পূর্ণসংখ্যা একসাথে যোগ করেন, আপনি ফলাফলের অপেক্ষায় থাকবেন না। তৃতীয় ভবিষ্যতের পূর্ণসংখ্যার জন্য আপনি যখন দু'জন ভবিষ্যতের পূর্ণসংখ্যার যোগ একসাথে করেন - কারণ এটি হ'ল এটি একটি পূর্ণসংখ্যা যা আপনি ভবিষ্যতে অ্যাক্সেস পেতে যাচ্ছেন - অবশ্যই আপনি ফলাফলটির জন্য অপেক্ষা করবেন।Task<int>
সমস্ত কিছুকে অ্যাসিঙ্ক না করার প্রাথমিক কারণ হ'ল async / প্রতীক্ষার উদ্দেশ্য হ'ল অনেক উচ্চতর বিলম্বিত ক্রিয়াকলাপ সহ কোনও পৃথিবীতে কোড লেখা সহজ করা । আপনার অপারেশন বেশীরভাগ হয় না উচ্চ অদৃশ্যতা, তাই এটি কোন অর্থে দেখা যায় না কর্মক্ষমতা নিতে যে লেটেন্সি আঘাত যে হ্রাস। বরং, আপনার ক্রিয়াকলাপগুলির কয়েকটি গুরুত্বপূর্ণ উচ্চ বিলম্বিত কারণ, এবং এই ক্রিয়াকলাপগুলি কোড জুড়ে অ্যাসিঙ্কের জম্বি অনুপ্রবেশ ঘটায়।
যদি পারফরম্যান্সই একমাত্র সমস্যা হয় তবে অবশ্যই কিছু চতুর অপ্টিমাইজেশন ওভারহেডটি যখন প্রয়োজন হয় না তখন তা স্বয়ংক্রিয়ভাবে সরিয়ে ফেলতে পারে।
তত্ত্বের ক্ষেত্রে তত্ত্ব এবং অনুশীলন একই রকম। অনুশীলনে, তারা কখনও হয় না।
এই ধরণের রূপান্তরটির বিরুদ্ধে আমি আপনাকে তিনটি পয়েন্ট দেব যার পরে একটি অপ্টিমাইজেশন পাস হবে।
আবার প্রথম পয়েন্টটি হ'ল: সি # / ভিবি / এফ # তে অ্যাসিঙ্ক মূলত ধারাবাহিকতা পাস করার একটি সীমিত রূপ । ক্রিয়ামূলক ভাষা সম্প্রদায়ের মধ্যে বিপুল পরিমাণে গবেষণা কীভাবে কোডটিকে অপ্টিমাইজ করতে হয় তা সনাক্ত করার উপায়গুলি সনাক্ত করতে সক্ষম হয়েছে যা ধারাবাহিকতা পাস করার শৈলীর ভারী ব্যবহার করে। সংকলক দলটিকে সম্ভবত এমন একটি পৃথিবীতে খুব একই সমস্যার সমাধান করতে হবে যেখানে "অ্যাসিঙ্ক" ডিফল্ট ছিল এবং অ-অ্যাসিঙ্ক পদ্ধতিগুলি চিহ্নিত করতে হয়েছিল এবং ডি-অ্যাসিঙ্ক-আইএফআইডি করতে হয়েছিল। সি # টিম খোলামেলা গবেষণার সমস্যাগুলি গ্রহণ করতে আগ্রহী নয়, সুতরাং এটি ঠিক সেখানে বড় পয়েন্ট big
এর বিপরীতে একটি দ্বিতীয় বিষয় হ'ল সি # এর "রেফারেনশিয়াল স্বচ্ছতা" এর স্তর নেই যা এই ধরণের অপ্টিমাইজেশানকে আরও ট্র্যাকটেবল করে তোলে। "রেফারেন্সিয়াল স্বচ্ছতা" দ্বারা আমি বোঝাচ্ছি যে সম্পত্তিটি যখন মূল্যায়ণ হয় তখন কোনও অভিব্যক্তির মান নির্ভর করে না । মত প্রকাশ 2 + 2
মতামত স্বচ্ছ; আপনি চাইলে সংকলন সময়ে মূল্যায়নটি করতে পারেন, বা রানটাইম পর্যন্ত এটি পিছিয়ে রেখে একই উত্তরটি পেতে পারেন। তবে মত x+y
প্রকাশটি সময়ের সাথে সাথে সরানো যায় না কারণ x এবং y সময়ের সাথে সাথে পরিবর্তিত হতে পারে ।
অ্যাসিঙ্ক কখন পার্শ্ব প্রতিক্রিয়াটি ঘটবে তা নিয়ে যুক্তি দেখানো আরও শক্ত করে তোলে। অ্যাসিঙ্কের আগে, যদি আপনি বলেছিলেন:
M();
N();
এবং M()
ছিল void M() { Q(); R(); }
, এবং N()
ছিল void N() { S(); T(); }
, এবং R
এবং S
উত্পাদন পার্শ্ব প্রতিক্রিয়া, তারপর আপনি কি জানেন যে আর এর পার্শ্ব প্রতিক্রিয়া এস এর পার্শ্ব প্রতিক্রিয়া সামনে ঘটবে। তবে যদি আপনার হয়async void M() { await Q(); R(); }
হঠাৎ করে উইন্ডোটি চলে যায়। এর R()
আগে বা পরে ঘটতে যাচ্ছে কিনা তার আপনার কোনও গ্যারান্টি নেই S()
(অবশ্যই M()
যদি অপেক্ষা করা না হয়; তবে অবশ্যই এটির Task
পরে অপেক্ষা করা হবে না N()
))
এখন কল্পনা করুন যে এই অপটিমাইজেশনটি ডি-অ্যাসিঙ্ক-ইফাই পরিচালনা করে এমনটি ব্যতীত আপনার প্রোগ্রামের প্রতিটি কোডের ক্ষেত্রে কী অর্ডার পার্শ্ব প্রতিক্রিয়াগুলি ঘটে তা না জেনে এই সম্পত্তিটি । মূলত আপনার আর কোনও ধারণা নেই যা কোন ক্রমের ক্রিয়াকলাপগুলি মূল্যায়ন করা হবে যার অর্থ হল যে সমস্ত অভিব্যক্তিটি উল্লেখযোগ্যভাবে স্বচ্ছ হওয়া দরকার যা সি # এর মতো ভাষায় শক্ত।
তৃতীয় বিষয়টির বিপরীতে হ'ল আপনাকে তখন জিজ্ঞাসা করতে হবে "এ্যাসিঙ্ক এত বিশেষ কেন?" আপনি যদি তর্ক করতে চলেছেন যে প্রতিটি ক্রিয়াকলাপ আসলেই একটি হওয়া উচিত Task<T>
তখন আপনার প্রশ্নের উত্তর দিতে সক্ষম হওয়া দরকার "কেন নয় Lazy<T>
?" বা "কেন নয় Nullable<T>
?" বা "কেন নয় IEnumerable<T>
?" কারণ আমরা ঠিক সেই কাজটি করতে পারি। কেন এমনটি হওয়া উচিত নয় যে প্রতিটি ক্রিয়াকলাপটি অবনমিত হয় ? অথবা প্রতিটি ক্রিয়াকলাপটি অলসভাবে গণনা করা হয় এবং ফলাফলটি পরবর্তীকালে ক্যাশে করা হয় বা প্রতিটি ক্রিয়াকলাপের ফলাফলটি কেবল একটি একক মানের পরিবর্তে মানগুলির ক্রম হয় । তারপরে আপনাকে সেই পরিস্থিতিগুলি অপ্টিমাইজ করার চেষ্টা করতে হবে যেখানে আপনি জানেন "ওহ, এটি কখনই বাতিল হওয়া উচিত নয়, তাই আমি আরও ভাল কোড তৈরি করতে পারি" ইত্যাদি।
পয়েন্ট হচ্ছে: এটি আমার কাছে পরিষ্কার নয় Task<T>
এটি আসলে এত বেশি কাজের পরোয়ানা দেওয়া special
যদি এই ধরণের জিনিসগুলি আপনার আগ্রহী হয় তবে আমি আপনাকে হ্যাস্কেলের মতো কার্যকরী ভাষাগুলি তদন্ত করার পরামর্শ দিচ্ছি, যার সাথে আরও শক্তিশালী রেফারেন্সিয়াল স্বচ্ছতা রয়েছে এবং সমস্ত ধরণের বাইরের আদেশ মূল্যায়ন করতে দেয় এবং স্বয়ংক্রিয়ভাবে ক্যাচিং করে। আমি যে ধরণের "মোনাডিক লিফটিংস" এর জন্য ইঙ্গিত করেছি তার জন্য হ্যাস্কেলেরও প্রকারভেদে আরও শক্তিশালী সমর্থন রয়েছে।