ValueTask<T>
Task<T>
এটি একটি সুপারসেটের উপসেট নয় ।
ValueTask<T>
এটি একটি টি এবং এ এর একটি বৈষম্যমূলক ইউনিয়ন, এটি উপলব্ধ একটি টি মান সমকালীনভাবে ফেরত দেওয়ার Task<T>
জন্য এটি বরাদ্দ-মুক্ত করে তোলে ReadAsync<T>
(ব্যবহারের বিপরীতে Task.FromResult<T>
, যা একটি Task<T>
উদাহরণ বরাদ্দ করা প্রয়োজন )। ValueTask<T>
প্রতিক্ষণযোগ্য, তাই বেশিরভাগ দৃষ্টান্তগুলির ব্যবহার একটি এর সাথে আলাদা করা যায় না Task<T>
।
ভ্যালুটাস্ক, স্ট্রাক্ট হওয়ায়, এ্যাসিঙ্ক পদ্ধতিগুলি লিখতে সক্ষম করে যেগুলি এপিআই ধারাবাহিকতার সাথে আপস না করে সিঙ্ক্রোনিকভাবে চালালে মেমরি বরাদ্দ হয় না। কোনও টাস্ক রিটার্নিং পদ্ধতিতে একটি ইন্টারফেস রয়েছে তা কল্পনা করুন। এই ইন্টারফেসটি বাস্তবায়নকারী প্রতিটি শ্রেণীর অবশ্যই একটি টাস্ক প্রদান করতে হবে যদিও তারা সিঙ্ক্রোনালি কার্যকরভাবে ঘটতে পারে (আশা করি Task.FromResult ব্যবহার করে)। আপনার অবশ্যই ইন্টারফেসে 2 টি ভিন্ন পদ্ধতি থাকতে পারে, একটি সিঙ্ক্রোনাস ও একটি অ্যাসিঙ্ক একটি তবে এটিতে "সিঙ্ক ওভার সিঙ্ক" এবং "সিঙ্ক ওভার সিঙ্ক" এড়ানোর জন্য 2 টি পৃথক বাস্তবায়ন প্রয়োজন requires
সুতরাং এটি আপনাকে এমন একটি পদ্ধতি লিখতে দেয় যা হয় অ্যাসিনক্রোনাস বা সিঙ্ক্রোনাস হয়, বরং প্রতিটিটির জন্য একটি অন্যভাবে অভিন্ন পদ্ধতি লিখতে দেয়। আপনি যে কোনও জায়গায় এটি ব্যবহার করতে পারেন Task<T>
তবে এটি প্রায়শই কিছু যুক্ত করে না।
ঠিক আছে, এটি একটি জিনিস যুক্ত করে: এটি কলারের কাছে একটি অন্তর্ভুক্ত প্রতিশ্রুতি যুক্ত করে যে পদ্ধতিটি ValueTask<T>
সরবরাহ করে যে অতিরিক্ত কার্যকারিতা সরবরাহ করে। আমি ব্যক্তিগতভাবে প্যারামিটার এবং রিটার্নের ধরণের পছন্দ পছন্দ করি যা কলকারীকে যতটা সম্ভব বলে দেয়। IList<T>
যদি গণনা একটি গণনা প্রদান করতে না পারে তবে ফিরে আসবেন না; ফেরত না IEnumerable<T>
যদি এটা করতে পারেন। আপনার কোন পদ্ধতিটি যুক্তিসঙ্গতভাবে সিঙ্ক্রোনালি বলা যেতে পারে এবং কোনটি পারে না তা জানতে আপনার গ্রাহকদের কোনও ডকুমেন্টেশন সন্ধান করতে হবে না।
আমি ভবিষ্যতের ডিজাইনের পরিবর্তনগুলি এখানে একটি দৃinc় যুক্তি হিসাবে দেখছি না। একেবারে বিপরীত: যদি কোনও পদ্ধতি তার শব্দার্থবিজ্ঞানের পরিবর্তন করে, ততক্ষণে তার সমস্ত কলগুলি আপডেট না হওয়া অবধি এটি বিল্ডটি ভেঙে ফেলা উচিত । যদি এটিকে অনাকাঙ্ক্ষিত হিসাবে বিবেচনা করা হয় (এবং আমাকে বিশ্বাস করুন, আমি বিল্ডটি না ভাঙার আকাঙ্ক্ষার প্রতি সহানুভূতিশীল), ইন্টারফেসের সংস্করণটিকে বিবেচনা করুন।
শক্তিশালী টাইপিংয়ের জন্য এটি মূলত।
আপনার দোকানে অ্যাসিঙ্ক পদ্ধতিগুলি ডিজাইনকারী কিছু প্রোগ্রামার যদি জ্ঞাত সিদ্ধান্ত নিতে সক্ষম না হন তবে সেই কম অভিজ্ঞ প্রোগ্রামারদের প্রত্যেককেই একজন সিনিয়র মেন্টর নিয়োগ দেওয়া এবং সাপ্তাহিক কোড পর্যালোচনা করা সহায়ক হতে পারে। যদি তারা ভুল অনুমান করে তবে এটি কেন অন্যভাবে করা উচিত তা ব্যাখ্যা করুন। এটি সিনিয়র ছেলেদের পক্ষে ওভারহেড, তবে এটি জুনিয়রদের আরও দ্রুত গতিতে নিয়ে আসবে কেবল গভীর প্রান্তে টস না করে এবং তাদের অনুসরণ করার জন্য কিছু স্বেচ্ছাচারী নিয়ম দেয়।
পদ্ধতিটি লেখার লোকটি যদি এটি না জানত যে এটিকে সমকালীনভাবে বলা যেতে পারে, পৃথিবীতে কে করে ?!
আপনার যদি এমন অনেক অনভিজ্ঞ প্রোগ্রামার থাকে যা এসিঙ্ক পদ্ধতিগুলি লেখেন তবে সেই একই লোকেরা কি তাদেরও ডাকছে? তারা কী এ্যাসিঙ্ক কল করা নিরাপদ তাদের নিজেরাই নির্ধারণের জন্য যোগ্য, বা তারা কীভাবে এই বিষয়গুলিকে কল করে তার অনুরূপ নিয়ম প্রয়োগ শুরু করবে?
এখানে সমস্যাটি আপনার রিটার্নের ধরণের নয়, এটি প্রোগ্রামারদের ভূমিকায় রাখা হচ্ছে যার জন্য তারা প্রস্তুত নয়। এটি অবশ্যই কোনও কারণে ঘটেছে, সুতরাং আমি নিশ্চিত যে এটি সংশোধন করা তুচ্ছ হতে পারে না। এটিকে বর্ণনা করা অবশ্যই সমাধান নয়। তবে সংকলকটির অতীতের সমস্যাটি লুকিয়ে রাখার উপায় অনুসন্ধান করা কোনও সমাধান নয়।
ValueTask<T>
(বরাদ্দের শর্তে) আসলে অপরিহার্য ক্রিয়াকলাপগুলির জন্য বাস্তবায়ন না করার সুবিধার সাথে করণীয় (কারণ সেক্ষেত্রেValueTask<T>
এখনও স্তূপ বরাদ্দ প্রয়োজন হবে)।Task<T>
গ্রন্থাগারগুলির মধ্যে অন্যান্য প্রচুর সমর্থন থাকার বিষয়টিও রয়েছে ।