2010-06-02 7 views
8

एपीएम BeginXXX/EndXX जोड़े का उपयोग करता है और इवेंट-आधारित असिंक्रोनस पैटर्न (EAP) XXXAsync और XXX पूर्ण जोड़े का उपयोग करता है, लेकिन मैंने कार्य को वापस करने वाले तरीकों का नाम देने के तरीके पर कुछ भी मानक नहीं देखा है।कार्यों को नाम देने वाले विधियों के लिए स्वीकार्य पैटर्न क्या है?

मैं XXXTask उपयोग किया गया है:

Data GetData() 
Task<Data> GetDataTask() 

लेकिन अगर एक अधिक मानक दृष्टिकोण

उत्तर

12

सी # 5.0 (.NET 4.5 के साथ) के लिए नामकरण सम्मेलन कार्य वापसी विधियों के लिए XXXAsync है।

यदि इस नामकरण के साथ पहले से ही कोई विधि मौजूद है (उदाहरण के लिए, वेब क्लाइंट पर पहले से ही डाउनलोडडाटाएसिंक विधि है जो ईएपी पैटर्न लागू करती है), तो कार्य को एसिंक विधि को वापस करने का कार्य XXXTaskAsync नाम दिया जाना चाहिए।

+0

यहां इस नामकरण सम्मेलन के आधिकारिक दस्तावेज का लिंक दिया गया है: http://msdn.microsoft.com/en-us/library/hh873175.aspx। –

+0

एक तरफ ध्यान दें: सुनिश्चित करें कि यदि आप उस नामकरण सम्मेलन का उपयोग करते हैं, तो आप उपर्युक्त लिंक में वर्णित अन्य सिद्धांतों का भी पालन करते हैं। जैसे "सिंक्रोनस काम को न्यूनतम में रखा जाना चाहिए" हो सकता है कि जब आपकी असिंक विधि केवल कार्य को माध्यम से आधे रास्ते से बुलाती है, तो आपकी असिंक विधि केवल कार्य को आती है। –

+0

क्या 'BeginXXX' पर फेंक दिया गया है? मैं व्यक्तिगत रूप से बाद में 'XXXAsync' से अधिक पसंद करता हूं। –

-2

विकसित की है आप एक GetXXX -Method, जो अधिक है के बजाय एक संपत्ति प्रदान करने के लिए विचार कर सकते हैं सोच रहा था सी # में सामान्य। फिर आप लिख सकते हैं

Task<Data> DataTask { get; set; } //auto-implemented 
+1

मुझे लगता है कि यह कुछ हद तक टास्क संस्करण के लिए ओर्थोगोनल है - GetData() किया जा रहा है एक संपत्ति के बजाय एक विधि मूल पसंद है, और यह देखते हुए कि यह एक async संस्करण बनाने के लिए पर्याप्त हैवीवेट है हो सकता है, यह लग रहा है कि जैसे सही विकल्प है:) * कार्य संस्करण भी एक विधि है, निश्चित रूप से समझ में आता है और समानांतर एक्सटेंशन एक्सटेंशन पुस्तकालय में किए गए पैटर्न से मेल खाता है (हालांकि कोई तर्क दे सकता है कि एक्सटेंशन गुणों के लिए कोई समर्थन नहीं है क्योंकि :) विधियों बनाम गुण दिशानिर्देश अन्य जो इस पर चलते हैं: http://msdn.microsoft.com/en-us/library/ms229054.aspx –

+0

ग्रेट आलेख ... धन्यवाद – Simon

2

मैं के बाद से है कि एक ही टीम है कि पहली जगह :)

http://blogs.msdn.com/b/pfxteam/archive/2010/05/04/10007557.aspx

उनके पैटर्न में TPL बनाया द्वारा किया जाता है ParallelExtensionsExtras पुस्तकालय में पैटर्न का उपयोग की सलाह देते हैं आपके जैसा ही लगता है: [SyncAction] विधि के लिए कार्य करें जो कार्य (जिसे वापस किया जाता है) के माध्यम से सिंकएक्शन एसिंक करता है - डाउनलोडडाटाटास्क, सेंडटास्क, आदि

+0

स्वीकृत, मेरे साथ सहमत होने के लिए, लेकिन संदर्भ प्रदान करने के लिए स्वीकृत नहीं। धन्यवाद! – Karg

+1

मुझे यह मानना ​​है कि नामकरण वास्तव में लक्ष्य के संदर्भ में मेरे लिए थोड़ा अजीब लगता है कि विधि नामों को एक क्रिया की तरह पढ़ना चाहिए - BeginFoo, EndFoo बहुत स्पष्ट (नाम के रूप में) हैं, और FooAsync भी सभ्य IMHO है क्योंकि async लगता है स्पष्ट रूप से एक क्रिया है। हालांकि, फूटास्क वास्तव में मेरे लिए अजीब तरह से है कि 'foo' क्रिया का एक संज्ञा है जो अभी अंत में सामना कर रहा है। आईएमएचओ यह तब भ्रमित कर रहा है, उदाहरण के लिए, एक विधि नाम के रूप में "SendTask" मुझे चीज़ बनाता है यह एक ऐसा काम है जो एक कार्य भेजने जा रहा है। मुझे यकीन नहीं है कि "FooAsTask" या "FooAsyncAsTask" वास्तव में बेहतर हैं, हालांकि - उनके साथ ठीक है। :) –

संबंधित मुद्दे

 संबंधित मुद्दे