কোনও পদ্ধতিতে "অ্যাসিঙ্ক" প্রত্যয়টির ব্যবহার 'অ্যাসিঙ্ক' সংশোধক ব্যবহৃত হয়েছে কিনা তার উপর নির্ভর করে?


106

"এসাইক" এর সাথে প্রত্যাহিত পদ্ধতির নামগুলির জন্য কনভেনশন কী?

"অ্যাসিঙ্ক" প্রত্যয়টি কেবলমাত্র এমন কোনও পদ্ধতির সাথে সংযুক্ত করা উচিত যা asyncসংশোধনকারী দ্বারা ঘোষিত হয় ?

public async Task<bool> ConnectAsync()

নাকি এটাই কি যথেষ্ট যে পদ্ধতিটি কেবল ফিরে আসে Task<T>বা Task?

public Task<bool> ConnectAsync()

4
নামকরণ অংশের জন্য, টিএপি ডকটি বলেছেন: টিএপিতে অ্যাসিঙ্ক্রোনাস পদ্ধতিতে অপারেশন নামের পরে অ্যাসিঙ্ক প্রত্যয় অন্তর্ভুক্ত; উদাহরণস্বরূপ, একটি গেট অপারেশনের জন্য GetAsync। যদি আপনি এমন কোনও ক্লাসে কোনও ট্যাপ পদ্ধতি যুক্ত করে থাকেন যা ইতিমধ্যে এসিঙ্ক প্রত্যয় সহ সেই পদ্ধতির নামটি অন্তর্ভুক্ত করে থাকে তবে পরিবর্তে টাস্কএেন্সিক প্রত্যয়টি ব্যবহার করুন। উদাহরণস্বরূপ, যদি শ্রেণিতে ইতিমধ্যে একটি getAsync পদ্ধতি রয়েছে তবে getTaskAsync নামটি ব্যবহার করুন।
জেমস ম্যানিং

4
ঠিক আছে, আমি অনুমান করি যে "অসম্পূর্ণ পদ্ধতিগুলির নামকরণ কনভেনশন"
জেমস ম্যানিং

1
এটি একটি খারাপভাবে নির্মিত প্রশ্ন। লোকেরা ঝগড়া করছে, দ্ব্যর্থহীন উত্তর।
লুক পুপলেট

4
কারণ অনেকে এটিকে ভুল বুঝেছেন এবং আসল জিনিসটি জিজ্ঞাসা করা হচ্ছে তা নিয়ে তর্ক করছেন, ভাবছেন যে এটি একটি দ্বি-অংশ প্রশ্ন ইত্যাদি its এর বিভ্রান্তিকর প্রমাণ হ'ল মানুষ বিভ্রান্ত।
লুক পুপলেট

2
@ ডেভিডআরআর এই প্রশ্নটি আপাতভাবে যে বিভ্রান্তি সৃষ্টি করেছিল তা এখনও আমি বুঝতে পারি না। যদি আপনার সম্পাদনাগুলি বিভ্রান্তিতে এমন কিছু অর্ডার নিয়ে আসে যে এটি আপনাকে সহায়তা করেছে এবং সম্ভবত অন্যকে সাহায্য করতে পারে তবে আমি আপনার সম্পাদনাগুলিকে স্বাগত জানাই যে আপনি এমন কিছু অর্জন করেছেন যা আমি মূল সূচনায় পারি না। প্রশ্নটি এখন এত পুরানো যে আমি যখন এখানে জিজ্ঞাসা করেছি তখন আমার মানসিকতার কথা খুব কমই স্মরণ করতে পারি এবং তাই মূল অভিপ্রায়টি কম গুরুত্বপূর্ণ। লুক এর উত্তর প্রতিফলিত যে সমস্ত বিভ্রান্ত ছিল না। আমি এটি অত্যন্ত সহায়ক বলে মনে করি।
kasperhj

উত্তর:


127

আমার মতে মাইক্রোসফ্ট ডকুমেন্টেশন থেকে সত্যটি অস্পষ্ট:

ভিজ্যুয়াল স্টুডিও ২০১২ এবং। নেট ফ্রেমওয়ার্ক ৪.৫-এ, asyncকীওয়ার্ড ( Asyncভিজ্যুয়াল বেসিক) এর সাথে যুক্ত যে কোনও পদ্ধতি অ্যাসিক্রোনাস পদ্ধতি হিসাবে বিবেচিত হয় এবং সি # এবং ভিজ্যুয়াল বেসিক সংকলকগুলি ট্যাপটি ব্যবহার করে অ্যাসিক্রোনালি পদ্ধতিতে প্রয়োজনীয় রূপান্তরগুলি সম্পাদন করে। একটি অ্যাসিঙ্ক্রোনাস পদ্ধতিতে হয় কোনও Taskবা কোনও Task<TResult>বস্তুর প্রত্যাবর্তন করা উচিত ।

http://msdn.microsoft.com/en-us/library/hh873177(v=vs.110).aspx

ইতিমধ্যে এটি ঠিক নেই। এর সাথে যে কোনও পদ্ধতি asyncঅ্যাসিনক্রোনাস এবং তারপরে বলা উচিত এটি একটি Taskবা Task<T>- ফিরে আসতে হবে যা কল স্ট্যাকের শীর্ষে পদ্ধতিগুলির জন্য সঠিক নয়, উদাহরণস্বরূপ বাটন_ ক্লিক করুন বা async void

অবশ্যই, আপনাকে বিবেচনা করতে হবে যে সম্মেলনের মূল বক্তব্যটি কী?

আপনি বলতে পারেন যে Asyncপ্রত্যয়ী কনভেনশনটি এপিআই ব্যবহারকারীদের সাথে যোগাযোগ করা যে পদ্ধতিটি প্রতীক্ষিত। কোনও পদ্ধতির প্রতীক্ষিত হওয়ার জন্য, এটি অবশ্যই Taskএকটি শূন্যতার জন্য ফিরে আসতে হবে , বা Task<T>একটি মান-ফেরতের পদ্ধতির জন্য, যার অর্থ কেবলমাত্র পরবর্তীটিই প্রত্যয়যুক্ত হতে পারে Async

অথবা আপনি বলতে পারেন যে Asyncপ্রত্যয় সম্মেলনটি যোগাযোগ করার জন্য যে পদ্ধতিটি তাত্ক্ষণিকভাবে ফিরে আসতে পারে, বর্তমান থ্রেডটিকে অন্য কাজ সম্পাদন করতে এবং সম্ভাব্যভাবে দৌড় সৃষ্টির জন্য ত্যাগ করে।

এই মাইক্রোসফ্ট ডকের উক্তিটি বলে:

কনভেনশন দ্বারা, আপনি যে পদ্ধতিগুলির মধ্যে একটি অ্যাসিঙ্ক বা অ্যাসিঙ্ক সংশোধক রয়েছে তার নামগুলিতে "অ্যাসিঙ্ক" যুক্ত করুন।

http://msdn.microsoft.com/en-us/library/hh191443.aspx#BKMK_NamingConvention

যা এমনকি এটি উল্লেখ করে না যে আপনার নিজস্ব অ্যাসিক্রোনাস পদ্ধতিগুলি ফিরে আসার প্রত্যয় Taskপ্রয়োজন Async, যা আমি মনে করি আমরা সকলেই তারা তা করতে সম্মত।


সুতরাং এই প্রশ্নের উত্তর হতে পারে: উভয়ই। উভয় ক্ষেত্রেই, আপনি যোগ করতে হবে Asyncসঙ্গে পদ্ধতি asyncশব্দ এবং যে রিটার্ন Taskবা Task<T>


আমি স্টিফেন টুবকে পরিস্থিতি স্পষ্ট করতে বলছি।

হালনাগাদ

তাই আমি. এবং আমাদের উত্তম ব্যক্তি যা লিখেছেন তা এখানে:

যদি কোনও পাবলিক পদ্ধতিটি টাস্ক-রিটার্নিং হয় এবং প্রকৃতিতে অ্যাসক্রোনাস হয় (এমন একটি পদ্ধতির বিপরীতে যা সর্বদা সিঙ্ক্রোনালি সমাপ্তির জন্য কার্যকর হয় তবে কোনও কারণে কোনও টাস্ক ফেরত দেয়), এটির একটি "অ্যাসিঙ্ক" প্রত্যয় থাকা উচিত। এটাই গাইডলাইন। নামকরণের সাথে এখানে প্রাথমিক লক্ষ্যটি কার্যকারিতার একজন গ্রাহকের কাছে এটি খুব স্পষ্ট করে দেওয়া যে পদ্ধতিটি আহ্বান করা হচ্ছে সম্ভবত এটি তার সমস্ত কাজ সিঙ্ক্রোনজভাবে সম্পন্ন করবে না; এটি অবশ্যই সেই ক্ষেত্রে সাহায্য করে যেখানে কার্যকারিতা উভয় সিঙ্ক্রোনাস এবং অ্যাসিনক্রোনাস পদ্ধতির সাথেই উদ্ভাসিত হয় যাতে তাদের আলাদা করার জন্য আপনার নামের পার্থক্য প্রয়োজন। পদ্ধতিটি কীভাবে তার অ্যাসিনক্রোনাস বাস্তবায়ন অর্জন করে তা নামকরণের জন্য অবিরাম: অসম্পূর্ণ / প্রতীক্ষা সংকলকটির সহায়তা সংগ্রহ করতে ব্যবহৃত হয়, অথবা সিস্টেম.তন্ত্রকরণ থেকে প্রকার এবং পদ্ধতি কিনা তা সরাসরি ব্যবহার করা হয় (ই। ছ। টাস্ক কমপ্লিশনসোর্স) আসলেই কিছু যায় আসে না কারণ এটি পদ্ধতিটির গ্রাহক হিসাবে যতক্ষণ না পদ্ধতিটির স্বাক্ষরকে প্রভাবিত করে না।

অবশ্যই, গাইডলাইনটিতে সর্বদা ব্যতিক্রম রয়েছে। নামকরণের ক্ষেত্রে সর্বাধিক উল্লেখযোগ্য একটি হ'ল কেসগুলি যেখানে পুরো টাইপের রাইসন ডি'ইটি হ'ল অ্যাসিঙ্ক-ফোকাসড কার্যকারিতা সরবরাহ করা, সেই ক্ষেত্রে প্রতিটি পদ্ধতিতে অ্যাসিঙ্ক থাকা অত্যধিক কিল হতে পারে, যেমন টাস্কের নিজস্ব পদ্ধতি যা অন্যান্য টাস্ক তৈরি করে itself ।

অকার্যকর-প্রত্যাবর্তনকারী অ্যাসিক্রোনাস পদ্ধতিগুলি হিসাবে, জনসাধারণের তলদেশে থাকাগুলি থাকা বাঞ্ছনীয় নয়, কারণ অ্যাসিক্রোনাস কাজটি কখন সম্পন্ন হয়েছে the কলকারীর জানার কোনও ভাল উপায় নেই। যদি আপনাকে অবশ্যই প্রকাশ্যে একটি অকার্যকর-ফেরত অ্যাসিক্রোনাস পদ্ধতি প্রকাশ করতে হবে তবে আপনার সম্ভবত এমন একটি নাম থাকতে হবে যা বোঝায় যে অ্যাসিঙ্ক্রোনাস কাজ শুরু হচ্ছে এবং আপনি যদি "অ্যাসিঙ্ক" প্রত্যয়টি বোধগম্য হন তবে এটি ব্যবহার করতে পারেন। এই কেসটি কতটা বিরল হওয়া উচিত, তা বিবেচনা করে আমি যুক্তি দিয়ে বলছি এটি সত্যিই কেস বাই কেস জাতীয় সিদ্ধান্ত।

আমি আশা করি যে সাহায্য করে, স্টিভ

স্টিফেনের খোলার বাক্য থেকে সংক্ষিপ্ত দিকনির্দেশনা যথেষ্ট স্পষ্ট। এটি বাদ দেয় async voidকারণ এই জাতীয় নকশার দ্বারা একটি সর্বজনীন এপিআই তৈরি করা অস্বাভাবিক কারণ যেহেতু অ্যাসিঙ্ক্রোনাস শূন্যতা বাস্তবায়নের সঠিক উপায়টি একটি সরল Taskদৃষ্টান্ত ফিরে আসে এবং সংকলকটিকে তার যাদুতে যেতে দেয়। তবে, যদি আপনি একটি চান না public async void, তবে সংযোজনের Asyncপরামর্শ দেওয়া হয়। স্ট্যাকের অন্যান্য শীর্ষ async voidপদ্ধতি যেমন ইভেন্ট হ্যান্ডলারগুলি সাধারণত পাবলিক হয় না এবং কোনও বিষয় / যোগ্যতা রাখে না।

আমার জন্য, এটি আমাকে বলেছে যে আমি যদি নিজেকে অনায়াসে অনুভব Asyncকরার বিষয়ে ভাবছিলাম তবে async voidআমার সম্ভবত এটি এটিকে এমন রূপান্তর করা উচিত async Taskযাতে কলকারীরা এটির জন্য অপেক্ষা করতে পারে, তারপরে সংযোজন করানো উচিত Async


20
আচ্ছা এটি লজ্জাজনক আমাদের কাছে পদ্ধতি কলগুলির জন্য সময় চেক সংকলন নেই .. ওহ অপেক্ষা করুন। যদি আমি মেথড গেট বা গেটএসিঙ্কের নাম রাখি এবং কলিংয়ের পক্ষ থেকে অপেক্ষা না করি তবে সংকলনটি নির্মাণে ব্যর্থ হবে। সুতরাং এই কনভেনশনটি নিখুঁত এবং সত্যই মাইক্রোসফ্ট স্টাইলের অনেক নির্দেশিকাগুলির বিপরীতে চলছে, যেমন PersonStringবা PriceDecimalকেন ব্যবহারের বিষয়গুলি এড়ানো GetAsync- এ্যাসিঙ্ক এপিআইয়ের এপিআই গ্রাহকদের এ সম্পর্কে উদ্বিগ্ন হওয়ার দরকার নেই কারণ অনুরোধ সবসময় যাইহোক সমস্ত কাজ শেষ হওয়ার পরে ফিরে আসে। এটি নির্বোধ এবং সত্যই আমাকে বিরক্ত করে। তবে এটি কেবল অন্য একটি কনভেনশন যা আসলে সেখানে কেন তা কেউ জানেনা।
পাইওটর কুলা

2
@ পিপমকিন: স্টিফেন উল্লেখ করেছেন যে, কোনও পদ্ধতি সহজেই অ্যাসিঙ্ক / অপেক্ষা না করে প্রকৃতিতে অ্যাসিঙ্ক্রোনাস হতে পারে, সুতরাং কার্যকারিতা অ্যাসিনক্রোনাসে চালিত হয় বা না এই নামকরণকারী ছাড়া আর কোনও ইঙ্গিত নেই।
হান্নোবো

6
@ পিপমকিন: ডিফল্টরূপে একটি অ্যাসিঙ্ক পদ্ধতির অপেক্ষায় ব্যর্থ হওয়ার ফলে একটি সংকলন-সময় সতর্কতা আসে; একটি বিল্ড ত্রুটি না।
ডাস্টিন ক্লেভল্যান্ড

7
আমি এই কনভেনশনটি নির্বোধ। তিনটি স্বয়ংক্রিয় ইঙ্গিত রয়েছে যে কোনও পদ্ধতি অ্যাসিঙ্ক: ১. রিটার্নের ধরণটি টাস্ক। ২. কোড সমাপ্তি একটি প্রতীক্ষিত ইঙ্গিতটি উপস্থাপন করে the. আইডিই আপনাকে সবুজ বর্ণনায় এবং সংকলক সতর্কতা উপস্থাপন করে সতর্ক করবে। সুতরাং আমি @ পিপমকিনের সাথে পুরোপুরি একমত। অ্যাসিঙ্ক-প্রত্যয়টি যেমন নির্বোধ, তেমন নির্বোধ wrote কে এই করবে! ??
মার্কো

2
@ মারকো আমি এই ধারণাটি গিটহাবের উপরে উত্থাপন করেছি, ভেবেছিলাম এটি সবচেয়ে ভাল জায়গা, তবে এটির সাথে আমার কোনও ব্যস্ততা নেই যা আমি ভেবেছিলাম যে আমি পেয়ে যাব: github.com/dotnet/core/issues/1464
লূক পুপলেট

68

আমি প্রচুর এপিআই-পরিষেবা এবং অন্যান্য অ্যাপ্লিকেশন তৈরি করি যা অন্যকে এমন সিস্টেমে কল করে যেখানে আমার বেশিরভাগ কোড অবিচ্ছিন্ন অবস্থায় চলছে।

আমি অনুসরণ করছি আমার নিজস্ব নিয়মটি:

যদি অ-অ্যাসিঙ্ক এবং অ্যাসিঙ্ক পদ্ধতি উভয়ই একই জিনিস ফিরে আসে তবে আমি অ্যাসিঙ্কের সাথে অ্যাসিঙ্কটিকে প্রত্যয় দিয়েছি। অন্যথায় না।

উদাহরণ:

শুধুমাত্র একটি পদ্ধতি:

public async Task<User> GetUser() { [...] }

দুটি স্বাক্ষর সহ একই পদ্ধতি:

public User GetUser() { [...] }

public async Task<User> GetUserAsync() { [...] }

এটি একই ডেটা যেহেতু একই তথ্য ফিরে আসে কিন্তু একমাত্র যেটির মধ্যে তাত্পর্য রয়েছে তা হ'ল ডেটা ফেরত পাঠানোর উপায় data

আমি এও মনে করি যে এই নামকরণ কনভেনশনগুলি অ্যাসিঙ্ক পদ্ধতিগুলি প্রবর্তনের প্রয়োজনীয়তার কারণে এবং এখনও পিছনের সামঞ্জস্য বজায় রাখার কারণে বিদ্যমান exists

আমি যুক্তি দিচ্ছি যে নতুন কোডে অ্যাসিঙ্ক প্রত্যয় ব্যবহার করা উচিত নয়। এটি স্ট্রিংয়ের রিটার্ন টাইপের মতোই স্পষ্ট, বা এই থ্রেডে পূর্বে উল্লিখিত ইন্ট হিসাবে।


8
আমি সম্মত হই, বিশেষত আপনাকে সাধারণত 'সমস্ত উপায়ে অ্যাসিঙ্ক' চালিয়ে যাওয়া দরকার, সেক্ষেত্রে প্রত্যয়টি অপ্রয়োজনীয় - কোডটির 90% এ সংযুক্ত করার অর্থ কী;)
বার্তোস্ 20:58

3
এটিই সেরা সমাধান। এটিকে লক্ষ্য না করেই, আমি আমার এপিআইগুলিতে একইভাবে করছি।
মার্কো

2
এ্যাসিঙ্ক আবেদনের সমস্ত পদ্ধতির সাথে "অ্যাসিঙ্ক" প্রয়োগ করার চেয়ে এটি আরও ভাল
মারিউজ জামোর

এই কৌশলটির সমস্যাটি হ'ল যদি আপনি পরে একটি অ্যাসিঙ্ক সংস্করণ তৈরি করেন তবে আপনি অন্যথায় পছন্দসই "গেট ইউজার ()" নামটি ব্যবহার করতে পারবেন না।
ডেভিড

3
এটি হ'ল ব্যবহারিক উপায়। অ্যাসিঙ্ক মডিফায়ারযুক্ত প্রতিটি পদ্ধতিতে অ্যাসিঙ্ক যুক্ত করা হ'ল কেবল হাঙ্গেরিয়ান নোটেশন 2019 @
Skrymsli

25

"Async" এর সাথে প্রত্যাহিত পদ্ধতির নামগুলির জন্য কনভেনশন কী।

টাস্ক-ভিত্তিক অ্যাসিঙ্ক্রোনাস প্যাটার্ন (আলতো চাপুন) dictates যে পদ্ধতি সবসময় একটি ফেরত পাঠাবেন Task<T>(অথবা Task) এবং একটি সঙ্গে নামে এসিঙ্ক প্রত্যয়; এটি ব্যবহার থেকে পৃথক async। উভয় Task<bool> Connect()এবং কম্পাইল হবে এবং শুধু জরিমানা চালানো, কিন্তু আপনি ট্যাপ নামকরণ সম্মেলন নিম্নলিখিত হবে না।asyncTask<bool> Connect()

পদ্ধতিতে কি asyncসংশোধক থাকা উচিত , বা এটি কেবলমাত্র টাস্কটি ফেরত দেয়?

যদি পদ্ধতির মূল অংশ (রিটার্নের ধরন বা নাম নির্বিশেষে) অন্তর্ভুক্ত থাকে তবে awaitআপনাকে অবশ্যই ব্যবহার করতে হবেasync ; এবং সংকলক আপনাকে বলবে "'অপেক্ষা' অপারেটরটি কেবলমাত্র একটি এসিএনসি পদ্ধতিতে ব্যবহার করা যেতে পারে ... ..."। ফিরে আসা Task<T>বা Taskব্যবহার এড়াতে "যথেষ্ট" নয় async। দেখুন (গ # রেফারেন্স) ASYNC বিস্তারিত জানার জন্য।

অর্থাৎ এই স্বাক্ষরগুলির মধ্যে কোনটি সঠিক:

উভয়ই এবং যথাযথভাবে টিএপি সম্মেলনগুলি অনুসরণ করে। আপনি সর্বদা কীওয়ার্ডটি ব্যবহার করতে পারেন তবে আপনি একটি সংকলক সতর্কতা পেয়ে যাবেন "এই অ্যাসিঙ্ক পদ্ধতিতে অপারেটরগুলির অভাব রয়েছে এবং এটি সিঙ্ক্রোনিকভাবে চলবে ... ..." যদি শরীর ব্যবহার না করে ।asyncTask<bool> ConnectAsync()Task<bool> ConnectAsync()asyncawait


1
আপনি asyncকীওয়ার্ডটি ব্যবহার করেন কিনা তা নয়, আপনি পদ্ধতির নামের সাথে "Async" যুক্ত করেন কিনা তা তিনি উল্লেখ করছেন ।
পরিবেশন করুন

1
@ সার্ভে ওয়েথার বা কীওয়ার্ডটি ব্যবহার না করা asyncএই প্রশ্নের দ্বিতীয় অংশ।
করাক

2
@ সার্ভি এটি দুটি অংশের প্রশ্ন। প্রথম অংশটি, যেমন আপনি বলেছেন যে পদ্ধতিটির নামের সাথে "অ্যাসিঙ্ক" যুক্ত করা হবে কিনা। দ্বিতীয় অংশটি হ'ল asyncসংশোধকটি ব্যবহার করবেন কি না । ওপিএসের উদাহরণগুলি public async Task<bool> ConnectAsync()( asyncমডিফায়ার সহ) বনাম public Task<bool> ConnectAsync()( asyncসংশোধক ছাড়াই ) দেখুন। পদ্ধতির নামের নিজেই উভয় ক্ষেত্রে "Async" প্রত্যয় রয়েছে।
করাক

2
এটা না একটি দুই অংশ প্রশ্ন। প্রশ্নটি হ'ল, "এ্যাসিঙ্ক" কীভাবে ফিরে আসা পদ্ধতির নামগুলি Taskবা পদ্ধতিগুলির পদ্ধতিগুলির সাথে যুক্ত করা উচিত async Task?
kasperhj

3
@ লেজোন: আপনার প্রশ্নের উন্নতি করা উচিত; "বনাম" কোড স্নিপেটগুলি এটিকে পরিষ্কার করে দেয় (সম্পূর্ণরূপে) async সম্পর্কে যা কেবলমাত্র তফাত।
Ðаn

11

বা এটি যথেষ্ট যে এটি কেবল টাস্কটি দেয়?

যে। asyncশব্দ এখানে বাস্তব সমস্যা হয় না। যদি আপনি asyncকীওয়ার্ডটি ব্যবহার না করে অ্যাসিক্রোনির প্রয়োগ করেন তবে সাধারণ অর্থে পদ্ধতিটি এখনও "Async"।


7

যেহেতু Taskএবং Task<T>উভয় প্রতীক্ষিত ধরণের, তারা কিছু অ্যাসিনক্রোনাস অপারেশন উপস্থাপন করে। বা কমপক্ষে তাদের প্রতিনিধিত্ব করা উচিত।

আপনার এমন Asyncপদ্ধতিতে প্রত্যয় যুক্ত করা উচিত যা কিছু ক্ষেত্রে (অগত্যা সব নয়) কোনও মান দেয় না বরং চলমান ক্রিয়াকলাপের চারপাশে মোড়ক দেয়। এই মোড়ক সাধারণত একটি হয় Task, তবে উইন্ডোজ আরটিতে এটি হতে পারে IAsyncInfo। আপনার অন্ত্রের অনুভূতিটি অনুসরণ করুন এবং মনে রাখবেন যে আপনার কোডের কোনও ব্যবহারকারী যদি Asyncফাংশনটি দেখেন তবে সে জানবে যে সেই পদ্ধতির প্রার্থনাটি সেই পদ্ধতির ফলাফল থেকে ডুপ্লুড হয়ে গেছে এবং তাদের সেই অনুযায়ী কাজ করা দরকার।

মনে রাখবেন যে এমন পদ্ধতি রয়েছে যেমন Task.Delayএবং Task.WhenAllযা প্রত্যাবর্তন করে Taskএবং তার Asyncপ্রত্যয়টি নেই।

এছাড়াও লক্ষ করুন যে এমন কোনও async voidপদ্ধতি রয়েছে যা আগুনকে প্রতিনিধিত্ব করে এবং অ্যাসিক্রোনাস পদ্ধতিটি ভুলে যায় এবং আপনার আরও ভালভাবে সচেতন হওয়া উচিত যে পদ্ধতিটি এইভাবে নির্মিত।


6

আমি যুক্তি দিয়ে বলব যে পদ্ধতিটি asyncসংশোধনকারী দিয়ে ঘোষণা করা হয়েছে বা না তা বিবেচনা না করেই যদি এটি কোনও কার্য প্রদান করে তবে এটি অ্যাসিঙ্ক-প্রত্যয় ব্যবহার করা উচিত ।

এর পেছনের কারণটি ইন্টারফেসে নামটি ঘোষিত হয়েছে। ইন্টারফেসটি রিটার্ন টাইপের ঘোষণা করে যা a Task। তারপরে সেই ইন্টারফেসের দুটি বাস্তবায়ন রয়েছে, একটি বাস্তবায়ন এটি asyncসংশোধক ব্যবহার করে এটি প্রয়োগ করে , অন্যটি তা করে না।

public interface IFoo
{
    Task FooAsync();
}

public class FooA : IFoo
{
    public Task FooAsync() { /* ... */ }
}

public class FooB : IFoo
{
    public async Task FooAsync() { /* ... */ }
}

এটাই সত্যি. আমরা সর্বদা, সর্বত্র ইন্টারফেস ব্যবহার করি এবং ইন্টারফেসগুলি async হিসাবে ঘোষণা করা যায় না। সুতরাং অ্যাসিঙ্ক প্রত্যয়টি ব্যবহারের বিষয়ে সরকারী গাইডগুলি আমার কাছে সম্পূর্ণ বোকামি বলে মনে হচ্ছে। আমি মনে করি যে অ্যাসিঙ্ক কীওয়ার্ডটি কেবল একটি বাস্তবায়ন বিশদ, পদ্ধতির ইন্টার্নালগুলির অংশ এবং এর নাম বা বাহ্যিক যা কিছু প্রভাবিত করা উচিত নয়।
আল কেপ

5

ইন ASYNC এবং অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং অপেক্ষা (সি #) , মাইক্রোসফট নিম্নলিখিত নির্দেশিকা এইগুলি প্রদান করে:

নামকরণ কনভেনশন

কনভেনশন দ্বারা, আপনি এমন একটি পদ্ধতির নামগুলিতে "অ্যাসিঙ্ক" সংযোজন করেন যা একটি অ্যাসিঙ্ক সংশোধক রয়েছে have

আপনি কোনও সম্মেলন, বেস শ্রেণি বা ইন্টারফেস চুক্তি আলাদা নামের প্রস্তাব দেওয়ার সময় কনভেনশনটিকে উপেক্ষা করতে পারেন। উদাহরণস্বরূপ, যদি আপনি যেমন সাধারণ ইভেন্ট হ্যান্ডলার, নামান্তর করা উচিত নয় Button1_Click

আমি এই দিকনির্দেশটিকে অসম্পূর্ণ এবং সন্তোষজনক বলে মনে করি। এর অর্থ কি এই যে asyncপরিবর্তকের অনুপস্থিতিতে এই পদ্ধতির Connectপরিবর্তে নামকরণ করা উচিত ConnectAsync?

public Task<bool> ConnectAsync()
{
    return ConnectAsyncInternal();
}

আমি তাই মনে করি না. হিসাবে নির্দেশিত সংক্ষিপ্ত উত্তর দ্বারা @Servy এবং আরো বিস্তারিত উত্তর দ্বারা @Luke Puplett , আমি বিশ্বাস করি যে এটা যে এই পদ্ধতি যথাযথ ও প্রকৃতপক্ষে প্রত্যাশিত হয় উচিত নামে ConnectAsync(কারণ এটি একটি awaitable ফেরৎ)। এই আরও সমর্থন সালে @John স্কিট মধ্যে এই উত্তরটি অপর এক প্রশ্নের appends Asyncউপস্থিতিতে নির্বিশেষে পদ্ধতি নামের asyncপরিবর্তক।

অবশেষে, উপর অপর এক প্রশ্নের , বিবেচনা এই মন্তব্যটি দ্বারা @Damien_The_Unbeliever :

async/awaitহয় বাস্তবায়ন আপনার পদ্ধতির বিবরণ। আপনার পদ্ধতিটি ঘোষিত হয়েছে কিনা তা async Task Method()ন্যায় বিচারের বিষয় নয় Task Method(), যতক্ষণ না আপনার কলকারীরা উদ্বিগ্ন। (প্রকৃতপক্ষে, আপনি এটিকে একটি ব্রেকিং পরিবর্তন হিসাবে বিবেচনা না করে পরে সময়ে সময়ে এই দুজনের মধ্যে পরিবর্তন করতে পারেন))

সেখান থেকে, আমি অনুমান করি যে এটি পদ্ধতিটির অ্যাসিনক্রোনাস প্রকৃতি যা এটি নামকরণ করা উচিত তা নির্দেশ করে। পদ্ধতির ব্যবহারকারী এমনকি asyncএটি ব্যবহারের ক্ষেত্রে (সি # উত্স কোড বা সিআইএল ছাড়াই) সংশোধক ব্যবহার করা হচ্ছে কিনা তাও জানতে পারবেন না ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.