.net - Async abstract method and derived classes in API design -


मेरे पास सार वर्ग MyAbstractDoerClass है जिसमें एक सार विधि है DoItAsync का पालन करें:

  सार्वजनिक वर्ग MyAbtractDoerClass {सार्वजनिक सार कार्य DoItAsync (); }  

इसमें कुछ व्युत्पन्न क्लाइंट पेंटरक्लास और एराएरक्लास भी हैं:

  पब्लिक क्लास पेंटर क्लास: माईएबट्रैक्ट डोर क्लास {सार्वजनिक ओवरराइड एएससिंक टास्क DoItAsync (); } सार्वजनिक वर्ग EraserClass: MyAbtractDoerClass {सार्वजनिक ओवरराइड async कार्य DoItAsync (); }  

अंत में, एक फैक्टरी पद्धति है जो इन दो श्रेणियों में से किसी एक का उदाहरण देता है। हस्ताक्षर कुछ ऐसा है:

  सार्वजनिक MyAbstractClass फैक्टरी (स्ट्रिंग डोर टाइप)  

अब, मेरा कोड ऐसा दिखता है:

  var करियर = फैक्टरी ("चित्रकार"); कर्ता का इंतजार करो। DoItAsync (); // & lt; --- यहां समस्या है  

यह देखते हुए कि MyAbstractClass.DoItAsync विधि एक सार है, इसे async के रूप में चिह्नित नहीं किया जा सकता है और इसके कारण मैं API क्लाइंट में खोजशब्द का इंतजार नहीं कर सकता। इससे मेरे एपीआई उपयोगिता बहुत खराब दिखती है। मुझे संदेह है कि मेरे डिजाइन में कुछ गड़बड़ है, कुछ अवधारणा जिसे मैंने पूरी तरह से समझ नहीं पाया था, लेकिन मुझे नहीं पता।

मेरे कोड में क्या गलत है?

अपडेट

यह वह त्रुटि है जिसे मुझे वीएस में मिला है: छवि विवरण दर्ज करें यहाँ

और यह सार वर्ग में विधि का हस्ताक्षर है:

आप निश्चित रूप से कर सकते हैं ऐसा करें:

<पूर्व> कर्ता का इंतजार करो। डोएटएसिंक ();

समझने की मुख्य बात यह है कि प्रकार awaitable हैं, नहीं विधियों । आप कर सकते हैं await doer.DoItAsync () क्योंकि DoItAsync एक कार्य देता है, इसलिए नहीं क्योंकि DoItAsync है async । मैं इस बारे में अपने समझाता हूँ।

एक और तरीका रखो, यह कोड बिल्कुल वैसा ही है:

  टास्क अस्थायी = doer.DoItAsync (); Temp इंतजार;  

मेरे पास मेरे ब्लॉग पर एक है; पोस्ट में से एक को शामिल किया गया।


Comments

Popular posts from this blog

Editing Python Class in Shell and SQLAlchemy -

uislider - In a MATLAB GUI, how does one implement a continuously varying slider from a GUIDE created .m file? -

import - Python ImportError: No module named wmi -