डार्ट प्रोग्रामिंग - Async

एक asynchronous operation एक थ्रेड में निष्पादित होता है, से अलग होता है mainआवेदन धागा। जब कोई एप्लिकेशन असिंक्रोनस तरीके से किसी ऑपरेशन को करने के लिए एक विधि को बुलाता है, तो एसिंक्रोनस विधि अपना कार्य करते समय एप्लिकेशन को निष्पादित करना जारी रख सकती है।

उदाहरण

आइए इस अवधारणा को समझने के लिए एक उदाहरण लेते हैं। यहां, प्रोग्राम उपयोगकर्ता इनपुट का उपयोग करके स्वीकार करता हैIO library

import 'dart:io'; 
void main() { 
   print("Enter your name :");            
   
   // prompt for user input 
   String name = stdin.readLineSync();  
   
   // this is a synchronous method that reads user input 
   print("Hello Mr. ${name}"); 
   print("End of main"); 
}

readLineSync()एक तुल्यकालिक विधि है। इसका मतलब यह है कि सभी निर्देशों का निष्पादन जो पालन करता हैreadLineSync() फ़ंक्शन कॉल को तब तक के लिए अवरोधित कर दिया जाएगा readLineSync() पद्धति निष्पादन को पूरा करती है।

stdin.readLineSyncइनपुट की प्रतीक्षा है यह अपने पटरियों में बंद हो जाता है और उपयोगकर्ता के इनपुट प्राप्त होने तक इसे आगे निष्पादित नहीं करता है।

उपरोक्त उदाहरण के परिणामस्वरूप निम्नलिखित होंगे output -

Enter your name :     
Tom                   

// reads user input  
Hello Mr. Tom 
End of main

कंप्यूटिंग में, हम कहते हैं कि कुछ है synchronousजब यह जारी रखने से पहले किसी घटना के होने की प्रतीक्षा करता है। इस दृष्टिकोण में एक नुकसान यह है कि यदि कोड का एक हिस्सा निष्पादित करने में बहुत लंबा समय लेता है, तो बाद के ब्लॉक, हालांकि असंबंधित, निष्पादित करने से अवरुद्ध हो जाएंगे। एक वेबसर्वर पर विचार करें जो संसाधन के लिए कई अनुरोधों का जवाब देना चाहिए।

एक तुल्यकालिक निष्पादन मॉडल तब तक हर दूसरे उपयोगकर्ता के अनुरोध को ब्लॉक करेगा जब तक कि यह वर्तमान अनुरोध को संसाधित नहीं करता। ऐसे में, वेब सर्वर की तरह, हर अनुरोध दूसरों से स्वतंत्र होना चाहिए। इसका मतलब है, वेबसर्वर को अन्य उपयोगकर्ताओं से अनुरोध का जवाब देने से पहले निष्पादन को समाप्त करने के वर्तमान अनुरोध का इंतजार नहीं करना चाहिए।

सीधे शब्दों में कहें, यह पिछले उपयोगकर्ताओं के अनुरोधों को पूरा करने से पहले नए उपयोगकर्ताओं से अनुरोध स्वीकार करना चाहिए। इसे अतुल्यकालिक कहा जाता है। अतुल्यकालिक प्रोग्रामिंग का मूल रूप से कोई प्रतीक्षा या गैर-अवरुद्ध प्रोग्रामिंग मॉडल नहीं है। dart:async पैकेज डार्ट लिपि में अतुल्यकालिक प्रोग्रामिंग ब्लॉकों को लागू करने की सुविधा प्रदान करता है।

उदाहरण

निम्नलिखित उदाहरण बेहतर रूप से एक अतुल्यकालिक ब्लॉक के कामकाज को दिखाता है।

Step 1 - एक बनाएँ contact.txt नीचे दिए अनुसार फ़ाइल and इसे वर्तमान प्रोजेक्ट में डेटा फ़ोल्डर में सहेजें।

1, Tom 
2, John 
3, Tim 
4, Jane

Step 2 - एक प्रोग्राम लिखें जो एप्लिकेशन के अन्य हिस्सों को अवरुद्ध किए बिना फ़ाइल को पढ़ेगा।

import "dart:async"; 
import "dart:io";  

void main(){ 
   File file = new File( Directory.current.path+"\\data\\contact.txt"); 
   Future<String> f = file.readAsString();  
  
   // returns a futrue, this is Async method 
   f.then((data)=>print(data));  
   
   // once file is read , call back method is invoked  
   print("End of main");  
   // this get printed first, showing fileReading is non blocking or async 
}

output यह कार्यक्रम इस प्रकार होगा -

End of main 
1, Tom 
2, John 
3, Tim 
4, Jan

"मुख्य का अंत" सबसे पहले निष्पादित होता है जबकि स्क्रिप्ट फ़ाइल को पढ़ना जारी रखती है। Future वर्ग, का हिस्सा dart:asyncका उपयोग किया जाता है, अतुल्यकालिक कार्य पूरा होने के बाद एक संगणना का परिणाम प्राप्त करने के लिए। यहFuture मूल्य तब गणना खत्म होने के बाद कुछ करने के लिए उपयोग किया जाता है।

एक बार रीड ऑपरेशन पूरा हो जाने पर, निष्पादन नियंत्रण को भीतर स्थानांतरित कर दिया जाता है "then()"। ऐसा इसलिए है क्योंकि रीडिंग ऑपरेशन में अधिक समय लग सकता है और इसलिए यह प्रोग्राम के अन्य भाग को ब्लॉक नहीं करना चाहता है।

डार्ट भविष्य

डार्ट समुदाय एक परिभाषित करता है Futureके रूप में "भविष्य में कुछ समय के लिए एक मूल्य प्राप्त करने के लिए एक साधन।" सीधे शब्दों में कहें,Future objectsएक अभिव्यक्ति द्वारा लौटाए गए मूल्यों का प्रतिनिधित्व करने के लिए एक तंत्र है, जिसका निष्पादन बाद के समय में पूरा होगा। डार्ट के कई निर्मित वर्ग वापस आ जाते हैंFuture जब एक अतुल्यकालिक विधि कहा जाता है।

डार्ट एक एकल-थ्रेडेड प्रोग्रामिंग भाषा है। यदि कोई कोड निष्पादन के धागे को अवरुद्ध करता है (उदाहरण के लिए, समय लेने वाली कार्रवाई या I / O पर अवरुद्ध होने की प्रतीक्षा करके), कार्यक्रम प्रभावी रूप से जीतता है।

अतुल्यकालिक संचालन अवरुद्ध किए बिना आपके प्रोग्राम को चलने देते हैं। डार्ट का उपयोग करता हैFuture objects अतुल्यकालिक संचालन का प्रतिनिधित्व करने के लिए।