Asynchronous method invocation
મલ્ટીથ્રેડેડ કમ્પ્યુટર પ્રોગ્રામિંગમાં, એસિંક્રોનસ મેથડ ઇન્વોકેશન (AMI), જેને એસિંક્રોનસ મેથડ કોલ્સ અથવા એસિંક્રોનસ પેટર્ન તરીકે પણ ઓળખવામાં આવે છે તે એક ડિઝાઇન પેટર્ન છે જેમાં કૉલ કરેલ કોડ સમાપ્ત થવાની રાહ જોતી વખતે કૉલ સાઇટ અવરોધિત થતી નથી. તેના બદલે, જ્યારે જવાબ આવે ત્યારે કૉલિંગ થ્રેડ સૂચિત કરવામાં આવે છે. જવાબ માટે મતદાન એક અનિચ્છનીય વિકલ્પ છે. પૃષ્ઠભૂમિ એએમઆઈ એ ઑબ્જેક્ટની સંભવિત લાંબા સમયથી ચાલતી પદ્ધતિઓના અસુમેળ આહ્વાન માટેની ડિઝાઇન પેટર્ન છે. તે એલન વર્મ્યુલેન દ્વારા 1996માં વર્ણવવામાં આવેલી આઇ. ઓ. યુ. ("હું તમારો ઋણી છું") પેટર્નની સમકક્ષ છે. મોટાભાગની પ્રોગ્રામિંગ ભાષાઓમાં કહેવાતી પદ્ધતિ સુમેળમાં ચલાવવામાં આવે છે, એટલે કે. અમલના દોરામાં જેમાંથી તેને બોલાવવામાં આવે છે. જો પદ્ધતિ પૂર્ણ થવામાં લાંબો સમય લે છે, દા. ત. કારણ કે તે ઇન્ટરનેટ પર ડેટા લોડ કરી રહ્યું છે, પદ્ધતિ સમાપ્ત થાય ત્યાં સુધી કૉલિંગ થ્રેડ અવરોધિત છે. જ્યારે આ ઇચ્છનીય ન હોય, ત્યારે "કાર્યકર થ્રેડ" શરૂ કરવું અને ત્યાંથી પદ્ધતિનો ઉપયોગ કરવો શક્ય છે. મોટાભાગના પ્રોગ્રામિંગ વાતાવરણમાં આને કોડની ઘણી રેખાઓની જરૂર પડે છે, ખાસ કરીને જો ઓવરહેડને ટાળવા માટે કાળજી લેવામાં આવે જે ઘણા થ્રેડો બનાવવાને કારણે થઈ શકે છે. એએમઆઈ આ સમસ્યાનું સમાધાન કરે છે કે તે "એસિંક્રોનસ" વેરિઅન્ટ સાથે સંભવિત લાંબા સમયથી ચાલતી ("સિંક્રોનસ") ઓબ્જેક્ટ પદ્ધતિમાં વધારો કરે છે જે તરત જ પરત આવે છે, વધારાની પદ્ધતિઓ સાથે જે પૂર્ણતાની સૂચના પ્રાપ્ત કરવાનું સરળ બનાવે છે, અથવા પછીથી પૂર્ણ થવાની રાહ જુએ છે. એએમઆઈનો એક સામાન્ય ઉપયોગ સક્રિય ઓબ્જેક્ટ ડિઝાઇન પેટર્નમાં છે. વિકલ્પો સિંક્રનસ મેથડ ઇન્વોકેશન અને ફ્યુચર ઑબ્જેક્ટ્સ છે. એ. એમ. આઈ. નો ઉપયોગ કરી શકે તેવી એપ્લિકેશન માટેનું ઉદાહરણ એ વેબ બ્રાઉઝર છે જેને તમામ છબીઓ લોડ થાય તે પહેલાં જ વેબ પૃષ્ઠ પ્રદર્શિત કરવાની જરૂર છે. પદ્ધતિ એ પ્રક્રિયાનો એક વિશેષ કેસ હોવાથી, અસિંક્રોનસ પદ્ધતિનું આહ્વાન એ અસિંક્રોનસ પ્રક્રિયા કૉલનો એક વિશેષ કેસ છે. અમલીકરણ જાવામાં જાવા વર્ગ ફ્યુચરટાસ્ક વર્ગ સમાન સમસ્યાનું સમાધાન કરવા માટે ઘટનાઓનો ઉપયોગ કરે છે. આ પેટર્ન એ. એમ. આઈ. નો એક પ્રકાર છે, જેના અમલીકરણમાં વધુ ઓવરહેડ હોય છે, પરંતુ તે સોફ્ટવેર ઘટકોનું પ્રતિનિધિત્વ કરતી વસ્તુઓ માટે ઉપયોગી છે. ડોટ નેટ ફ્રેમવર્ક એસિંક્રોનસ પ્રોગ્રામિંગ મોડલ (એપીએમ) પેટર્ન (ડોટ નેટ ફ્રેમવર્ક 2 પહેલાં વપરાય છે) ઇવેન્ટ-આધારિત એસિંક્રોનસ પેટર્ન (ઇએપી) (ડોટ નેટ ફ્રેમવર્ક 2 માં વપરાય છે) ટાસ્ક-આધારિત એસિંક્રોનસ પેટર્ન (ટીએપી) (ડોટ નેટ ફ્રેમવર્ક 4 માં વપરાય છે) ઉદાહરણ નીચેનું ઉદાહરણ ડોટ નેટ ફ્રેમવર્કમાં ઉપયોગમાં લેવાતી પ્રમાણભૂત એએમઆઈ શૈલી પર આધારિત છે. એક પદ્ધતિને ધ્યાનમાં રાખીને, એક બે નવી પદ્ધતિઓ બેગિનએકમ્પ્લિશ અને એન્ડએકમ્પ્લિશ ઉમેરે છેઃ વર્ગ ઉદાહરણ {પરિણામ હાંસલ કરો (આરજીએસ.) આઇએસિંકઆરસલ્ટ બેગિનએકમ્પ્લિશ (આરજીએસ.) પરિણામ સમાપ્ત કરો (આઇએસિંકઆરસલ્ટ એ).} બેગિનએકમ્પ્લિશને કૉલ કર્યા પછી, ક્લાયન્ટને તરત જ એસિન્કઆરસલ્ટ (જે આઇએસિંકઆરસલ્ટ ઇન્ટરફેસને અમલમાં મૂકે છે) પ્રકારનો ઑબ્જેક્ટ પ્રાપ્ત થાય છે, જેથી તે અસંબંધિત કાર્ય સાથે કૉલિંગ થ્રેડ ચાલુ રાખી શકે. સૌથી સરળ કિસ્સામાં, આખરે આવું કોઈ કામ નથી, અને ક્લાયન્ટ એન્ડએકમ્પ્લિશ (અગાઉ પ્રાપ્ત થયેલ ઓબ્જેક્ટને પસાર કરીને) ને કૉલ કરે છે, જે પદ્ધતિ પૂર્ણ થાય અને પરિણામ ઉપલબ્ધ ન થાય ત્યાં સુધી અવરોધે છે. એસિન્ક્રિસલ્ટ ઓબ્જેક્ટ સામાન્ય રીતે ઓછામાં ઓછી એક પદ્ધતિ પૂરી પાડે છે જે ક્લાયન્ટને લાંબા સમયથી ચાલતી પદ્ધતિ પહેલેથી જ પૂર્ણ થઈ ગઈ છે કે કેમ તે પૂછવાની મંજૂરી આપે છેઃ ઈન્ટરફેસ IAsyncResult {bool HassCompleated ().} કોઈ પણ વ્યક્તિ બેગિનએકમ્પ્લિશ પર કોલબેક પદ્ધતિ પણ પસાર કરી શકે છે, જે લાંબા સમયથી ચાલતી પદ્ધતિ પૂર્ણ થાય ત્યારે લાગુ કરવામાં આવે છે. તે સામાન્ય રીતે લાંબા સમયથી ચાલતી પદ્ધતિનું વળતર મૂલ્ય મેળવવા માટે એન્ડએકમ્પ્લિશને કૉલ કરે છે. કોલબૅક મિકેનિઝમમાં એક સમસ્યા એ છે કે કોલબૅક કાર્ય કુદરતી રીતે કામદારના થ્રેડમાં (મૂળ કોલિંગ થ્રેડને બદલે) ચલાવવામાં આવે છે, જે રેસની સ્થિતિનું કારણ બની શકે છે. ડોટ નેટ ફ્રેમવર્ક દસ્તાવેજીકરણમાં, ઇવેન્ટ-આધારિત એસિંક્રોનસ પેટર્ન શબ્દ વૈકલ્પિક API શૈલી (ડોટ નેટ 2 થી ઉપલબ્ધ) નો ઉલ્લેખ કરે છે, જે બેગિન એકમ્પ્લિશને બદલે એકમ્પ્લિશ એસિંક્સ નામની પદ્ધતિનો ઉપયોગ કરે છે. એક સુપરફિસિયલ તફાવત એ છે કે આ શૈલીમાં લાંબા સમયથી ચાલતી પદ્ધતિનું વળતર મૂલ્ય સીધા કોલબેક પદ્ધતિમાં પસાર થાય છે. વધુ મહત્ત્વની વાત એ છે કે API એ જ થ્રેડમાં કોલબેક પદ્ધતિ ચલાવવા માટે એક વિશેષ પદ્ધતિનો ઉપયોગ કરે છે (જે એક્મ્પ્લિશ કોમ્પ્લીટેડ પ્રકારનાં ઇવેન્ટ ઓબ્જેક્ટમાં રહે છે) જેમાં બેગિનએકમ્પ્લિશને બોલાવવામાં આવી હતી. આ રેસની પરિસ્થિતિઓના જોખમને દૂર કરે છે, જે API નો ઉપયોગ કરવાનું સરળ બનાવે છે અને સોફ્ટવેર ઘટકો માટે યોગ્ય બનાવે છે; બીજી તરફ પેટર્નનું આ અમલીકરણ વધારાના ઓબ્જેક્ટ બનાવટ અને ઓવરહેડ સિંક્રોનાઇઝેશન સાથે આવે છે. સંદર્ભો વધુ વાંચન અસિંક્રોનસ પદ્ધતિનો ઉપયોગ કરીને C #થ્રેડ્સ (કમ્પ્યુટિંગ) સોફ્ટવેર ડિઝાઇન પેટર્નમાં કૉલ કરો