Asynchronous method invocation
मल्टीथ्रेडेड कंप्यूटर प्रोग्रामिंग में, एसिंक्रोनस मेथड इन्वोकेशन (ए. एम. आई.), जिसे एसिंक्रोनस मेथड कॉल या एसिंक्रोनस पैटर्न के रूप में भी जाना जाता है, एक डिज़ाइन पैटर्न है जिसमें कॉल किए गए कोड के समाप्त होने की प्रतीक्षा करते समय कॉल साइट को अवरुद्ध नहीं किया जाता है। इसके बजाय, जवाब आने पर कॉलिंग थ्रेड को सूचित किया जाता है। उत्तर के लिए मतदान एक अवांछित विकल्प है। पृष्ठभूमि ए. एम. आई. किसी वस्तु के संभावित रूप से लंबे समय तक चलने वाले तरीकों के अतुल्यकालिक आह्वान के लिए एक डिजाइन पैटर्न है। यह 1996 में एलन वर्म्यूलेन द्वारा वर्णित आई. ओ. यू. ("मैं आपका ऋणी हूँ") पैटर्न के बराबर है। अधिकांश प्रोग्रामिंग भाषाओं में एक तथाकथित विधि को समकालिक रूप से निष्पादित किया जाता है, अर्थात। निष्पादन के धागे में जिससे इसे लागू किया जाता है। यदि विधि को पूरा होने में लंबा समय लगता है, जैसे। क्योंकि यह इंटरनेट पर डेटा लोड कर रहा है, कॉलिंग थ्रेड को तब तक अवरुद्ध कर दिया जाता है जब तक कि विधि समाप्त नहीं हो जाती। जब यह वांछित नहीं होता है, तो "कार्यकर्ता धागा" शुरू करना और वहां से विधि का आह्वान करना संभव है। अधिकांश प्रोग्रामिंग वातावरण में इसके लिए कोड की कई पंक्तियों की आवश्यकता होती है, विशेष रूप से यदि ओवरहेड से बचने के लिए ध्यान रखा जाता है जो कई धागे बनाने के कारण हो सकता है। ए. एम. आई. इस समस्या को हल करता है कि यह एक "अतुल्यकालिक" संस्करण के साथ संभावित रूप से लंबे समय तक चलने वाली ("समकालिक") वस्तु विधि को बढ़ाता है जो तुरंत लौटती है, साथ ही अतिरिक्त विधियों के साथ जो पूरा होने की सूचना प्राप्त करना या बाद में पूरा होने की प्रतीक्षा करना आसान बनाती है। ए. एम. आई. का एक आम उपयोग सक्रिय ऑब्जेक्ट डिजाइन पैटर्न में है। विकल्प तुल्यकालिक विधि आह्वान और भविष्य की वस्तुएँ हैं। ए. एम. आई. का उपयोग करने वाले अनुप्रयोग के लिए एक उदाहरण एक वेब ब्राउज़र है जिसे सभी छवियों को लोड करने से पहले ही एक वेब पृष्ठ प्रदर्शित करने की आवश्यकता होती है। चूँकि विधि प्रक्रिया का एक विशेष मामला है, अतुल्यकालिक विधि आह्वान अतुल्यकालिक प्रक्रिया कॉल का एक विशेष मामला है। जावा में जावा वर्ग फ्यूचरटास्क वर्ग उसी समस्या को हल करने के लिए घटनाओं का उपयोग करता है। यह पैटर्न ए. एम. आई. का एक प्रकार है जिसके कार्यान्वयन में अधिक भार होता है, लेकिन यह सॉफ्टवेयर घटकों का प्रतिनिधित्व करने वाली वस्तुओं के लिए उपयोगी है। . NET फ्रेमवर्क एसिंक्रोनस प्रोग्रामिंग मॉडल (एपीएम) पैटर्न (. NET फ्रेमवर्क 2 से पहले उपयोग किया गया) घटना-आधारित एसिंक्रोनस पैटर्न (ईएपी) (. NET फ्रेमवर्क 2 में उपयोग किया गया) कार्य-आधारित एसिंक्रोनस पैटर्न (टीएपी) (. NET फ्रेमवर्क 4 में उपयोग किया गया) उदाहरण निम्नलिखित उदाहरण. NET फ्रेमवर्क में उपयोग की जाने वाली मानक एएमआई शैली पर आधारित है। एक विधि को पूरा करने के लिए, दो नए तरीकों को जोड़ा जाता हैः वर्ग उदाहरण {परिणाम प्राप्त करें (एआरजीएस.) आईएसिंक्रिसल्ट शुरू करें (एआरजीएस.) परिणाम समाप्त करें (आईएसिंक्रिसल्ट ए)।} बेगिनएकंप्लिश को कॉल करने पर, क्लाइंट को तुरंत एसिंक्रिसल्ट प्रकार का एक ऑब्जेक्ट प्राप्त होता है (जो आईएसिंक्रिसल्ट इंटरफेस को लागू करता है), ताकि यह असंबंधित काम के साथ कॉलिंग थ्रेड को जारी रख सके। सबसे सरल मामले में, अंततः ऐसा कोई काम नहीं होता है, और ग्राहक एंडएकॉम्प्लिश (पहले प्राप्त वस्तु को पास करना) को कॉल करता है, जो तब तक अवरुद्ध करता है जब तक कि विधि पूरी नहीं हो जाती और परिणाम उपलब्ध नहीं हो जाता। एसिंक्रिसल्ट ऑब्जेक्ट आम तौर पर कम से कम एक विधि प्रदान करता है जो क्लाइंट को यह पूछताछ करने की अनुमति देता है कि क्या लंबे समय से चलने वाली विधि पहले ही पूरी हो चुकी हैः इंटरफेस आईसिंक्रिसल्ट {बूल हैसकंप्लीटेड ()।} कोई भी कॉलबैक विधि को बिगिनएकंप्लिश को भी पास कर सकता है, जिसे लंबे समय तक चलने वाली विधि के पूरा होने पर लागू किया जा सकता है। यह आम तौर पर लंबे समय से चलने वाली विधि के वापसी मूल्य को प्राप्त करने के लिए एंडएकॉम्प्लिश को कॉल करता है। कॉलबैक तंत्र के साथ एक समस्या यह है कि कॉलबैक कार्य स्वाभाविक रूप से कार्यकर्ता धागे (मूल कॉलिंग धागे के बजाय) में निष्पादित किया जाता है, जो दौड़ की स्थिति का कारण बन सकता है। . NET फ्रेमवर्क प्रलेखन में, घटना-आधारित अतुल्यकालिक पैटर्न शब्द एक वैकल्पिक API शैली (. NET 2 के बाद से उपलब्ध) को संदर्भित करता है जिसमें बेगिनएकॉम्प्लिश के बजाय एकॉम्प्लिशएकॉम्प्लिश नामक विधि का उपयोग किया जाता है। एक सतही अंतर यह है कि इस शैली में लंबे समय तक चलने वाली विधि का वापसी मूल्य सीधे कॉलबैक विधि में पारित किया जाता है। इससे भी महत्वपूर्ण बात यह है कि एपीआई कॉलबैक विधि को चलाने के लिए एक विशेष तंत्र का उपयोग करता है (जो एक इवेंट ऑब्जेक्ट टाइप एकम्प्लिश कम्प्लीटेड में रहता है) उसी धागे में जिसमें बेगिनएकम्प्लिश को बुलाया गया था। यह दौड़ की स्थितियों के खतरे को समाप्त करता है, जिससे एपीआई का उपयोग करना आसान हो जाता है और सॉफ्टवेयर घटकों के लिए उपयुक्त हो जाता है; दूसरी ओर पैटर्न का यह कार्यान्वयन अतिरिक्त वस्तु निर्माण और सिंक्रनाइज़ेशन ओवरहेड के साथ आता है। सी #थ्रेड्स (कंप्यूटिंग) सॉफ्टवेयर डिजाइन पैटर्न में अतुल्यकालिक विधि कॉल का उपयोग करना