समवर्ती कार्य
इस पर लागू होता है: कैनवास ऐप्स मॉडल-संचालित ऐप्स
कई सूत्रों का एक-दूसरे के साथ पारस्परिक रूप से मूल्यांकन करता है.
विवरण
Concurrent फ़ंक्शन एक ही गुण में निर्दिष्ट एकाधिक सूत्रों का एक ही समय में मूल्यांकन करने की अनुमति देता है यदि उनके पास कनेक्टर या Dataverse कॉल हैं. आम तौर पर, कई सूत्रों का मूल्यांकन ; (सेमी-कॉलन) ऑपरेटर के माध्यम से उन्हें चेनिंग करके किया जाता है, जो प्रत्येक सूत्र का क्रमिक रूप से मूल्यांकन करता है. Concurrent फ़ंक्शन के साथ, ऐप ; ऑपरेटर का उपयोग करने के बाद भी समवर्ती रूप से गुण के भीतर सभी सूत्रों का मूल्यांकन करेगा. यह सहसंगता उपयोगकर्ताओं को उसी परिणाम के लिए कम प्रतीक्षा करने में मदद करेगी.
अपने ऐप के OnStart गुण में, Concurrent का उपयोग करें, ताकि ऐप द्वारा डेटा लोड किए जाने के दौरान प्रदर्शन में सुधार हो सके. जब पिछली कॉल समाप्त होने तक, डेटा कॉल शुरू नहीं होती है, तो ऐप को सभी अनुरोध समय के योग की प्रतीक्षा करनी चाहिए. यदि डेटा कॉल उसी समय शुरू हो जाती हैं, तो ऐप को केवल सबसे लंबे समय के अनुरोध के लिए प्रतीक्षा करनी होती है. वेब ब्राउज़र अक्सर पारस्परिक रूप से नेटवर्क कॉल करके प्रदर्शन में सुधार करते हैं.
आप उस क्रम का अनुमान नहीं लगा सकते हैं, जिसमें Concurrent फ़ंक्शन के तहत सूत्रों का मूल्यांकन प्रारंभ और समाप्त होता है. Concurrent फ़ंक्शन के अंतर्गत मौजूद सूत्रों की उसी Concurrent फ़ंक्शन के अंतर्गत मौजूद अन्य सूत्रों पर निर्भरताएँ नहीं होनी चाहिए और यदि आप प्रयास करेंगे, तो Power Apps एक त्रुटि दिखाएगा. भीतर से, आप सूत्रों पर मौजूद निर्भरताओं को सुरक्षित रूप से Concurrent फ़ंक्शन के बाहर ले जा सकते हैं, क्योंकि वे Concurrent फ़ंक्शन के प्रारंभ होने से पहले पूर्ण हो जाएंगी. Concurrent फ़ंक्शन द्वारा सुरक्षित रूप से भीतर मौजूद सूत्रों से निर्भरताएँ लिए जाने के बाद सूत्र: Concurrent फ़ंक्शन के कार्य समाप्त करने से पहले वे सभी पूर्ण हो जाएँगे और एक श्रृंखला में अगले सूत्र पर आगे बढ़ जाएंगे (यदि आप ; ऑपरेटर का उपयोग करते हैं). यदि आप ऐसे फ़ंक्शन या सेवा विधियों का उपयोग कर रहे हैं, जिनके साइड इफ़ैक्ट हैं, तो सूक्ष्म क्रम निर्भरताएँ देखें.
आप Concurrent के तर्क के अंदर ; ऑपरेटर की मदद से सूत्र को एक-साथ श्रृंखलाबद्ध कर सकते हैं. उदाहरण के लिए, Concurrent( Set( a, 1 ); Set( b, a+1 ), Set( x, 2 ); Set( y, x+2 ) ), Set( x, 2 ); Set( y, x+2 ) के साथ Set( a, 1 ); Set( b, a+1 ) का पारस्परिक रूप से मूल्यांकन करता है. इस मामले में, सूत्रों के भीतर निर्भरताएँ ठीक हैं: a, b से पहले सेट किया जाएगा और x, y से पहले सेट किया जाएगा.
वह डिवाइस या ब्राउज़र, जिस पर ऐप चल रहा है, उसके आधार पर, वास्तव में केवल कुछ ही सूत्र पारस्परिक रूप से मूल्यांकित किए जाते हैं. समवर्ती उपलब्ध क्षमताओं का उपयोग करता है और तब तक समाप्त नहीं होगा जब तक सभी सूत्रों का मूल्यांकन नहीं हो जाता।
यदि आप सूत्र-स्तरीय त्रुटि प्रबंधन (उन्नत सेटिंग में) सक्षम करते हैं, तो तर्क क्रम में पाई गई पहली त्रुटि Concurrent द्वारा दिखाई जाती है; अन्यथा, रिक्त दिखाया जाता है. यदि सभी सूत्र सफल रहते हैं, तो सही दिखाया जाता है. यदि एक सूत्र विफल हो जाता है, तो उस सूत्र का शेष भाग बंद हो जाता है, लेकिन अन्य सूत्रों का मूल्यांकन जारी रहता है.
आप केवल व्यवहार सूत्रों में Concurrent का उपयोग कर सकते हैं.
सिंटैक्स
समवर्ती( फ़ॉर्मूला1, फ़ॉर्मूला2 [, ...] )
- सूत्र – आवश्यक. पारस्परिक रूप से मूल्यांकित किए जाने वाले सूत्र. आपको कम से कम दो सूत्र देने होंगे.
उदाहरण
तेज़ी से डेटा लोड करना
एक ऐप बनाएँ और Microsoft Dataverse, SQL Server या SharePoint से चार डेटा स्रोत जोड़ें.
यह उदाहरण SQL Azure पर नमूना एडवेंचर वर्क्स डेटाबेस से चार तालिकाओं का उपयोग करता है. डेटाबेस बनाने के बाद, पूरी तरह से योग्य सर्वर नाम का उपयोग करके (उदाहरण के लिए, srvname.database.windows.net) उसे Power Apps से कनेक्ट करें:
एक Button नियंत्रण जोड़ें और उसके OnSelect गुण को इस सूत्र पर सेट करें:
ClearCollect( Product, '[SalesLT].[Product]' ); ClearCollect( Customer, '[SalesLT].[Customer]' ); ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' ); ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' )
Microsoft Edge या Google Chrome में, अपने ऐप के चलने के दौरान डेवलपर उपकरण चालू करें, ताकि नेटवर्क ट्रैफ़िक मॉनीटर किया जा सके.
(वैकल्पिक) इस तुलना के प्रभावों को बढ़ाने के लिए नेटवर्क थ्रॉटलिंग चालू करें.
Alt कुंजी को दबाए रखते हुए, बटन का चयन करें और उसके बाद नेटवर्क ट्रैफ़िक देखें.
इस उदाहरण के समान, उपकरण श्रृंखला में किए गए चार अनुरोधों को दिखाते हैं. वास्तविक समय निकाल दिए गए हैं, क्योंकि वे बहुत ज्यादा भिन्न होंगे. ग्राफ़ दिखाता है कि प्रत्येक कॉल अंतिम कॉल के समाप्त होने के बाद शुरू होती है:
ऐप सहेजें, बंद करें और पुनः खोलें.
Power Apps डेटा को कैश करता है, इसलिए बटन को फिर से चुनने से आवश्यक रूप से चार नए अनुरोध नहीं होंगे. हर बार जब आप प्रदर्शन का परीक्षण करना चाहें, तो अपने ऐप को बंद करें और फिर से खोलें. यदि आपने नेटवर्क थ्रॉटलिंग चालू किया है, तो हो सकता है कि आप इसे तब तक बंद न करना चाहें, जब तक कि आप किसी अन्य परीक्षण के लिए तैयार न हों.
दूसरा बटन नियंत्रण जोड़ें और उसके OnSelect गुण को इस सूत्र पर सेट करें:
Concurrent( ClearCollect( Product, '[SalesLT].[Product]' ), ClearCollect( Customer, '[SalesLT].[Customer]' ), ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' ), ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' ) )
ध्यान दें कि आपने पहले बटन पर वही ClearCollect कॉल जोड़ें है, लेकिन इस बार उन्हें Concurrent फ़ंक्शन में रैप किया गया है और कॉमा से अलग-अलग किया गया है.
ब्राउज़र में नेटवर्क मॉनीटर को साफ़ करें.
यदि आप पहले नेटवर्क थ्रॉटलिंग का उपयोग कर रहे थे, तो उसे फिर से चालू करें.
Alt कुंजी को दबाए रखते हुए, दूसरे बटन का चयन करें और उसके बाद नेटवर्क ट्रैफ़िक देखें.
इस उदाहरण के समान, उपकरण पारस्परिक रूप से निष्पादित किए गए चार अनुरोधों को दिखाते हैं. पुनः, वास्तविक समय निकाल दिए गए हैं, क्योंकि वे बहुत ज्यादा भिन्न होंगे. ग्राफ़ दिखाता है कि सभी कॉल एक ही समय में शुरू होते हैं और पिछले के समाप्त होने तक इंतजार नहीं करते:
ये ग्राफ़ समान स्केल पर आधारित हैं. Concurrent का उपयोग करके, आपने इन कार्यों को पूरा करने में लगने वाले कुल समय को आधा कर दिया है.
ऐप सहेजें, बंद करें और पुनः खोलें.
रेस कंडीशन
अपने ऐप में Microsoft Translator सेवा का कनेक्शन जोड़ें.
एक पाठ इनपुट नियंत्रण जोड़ें और यदि उसका नाम TextInput1 से अलग है, तो उसे यह नाम दें.
एक बटन नियंत्रण जोड़ें और उसके OnSelect गुण को इस सूत्र पर सेट करें:
Set( StartTime, Value( Now() ) ); Concurrent( Set( FRTrans, MicrosoftTranslator.Translate( TextInput1.Text, "fr" ) ); Set( FRTransTime, Value( Now() ) ), Set( DETrans, MicrosoftTranslator.Translate( TextInput1.Text, "de" ) ); Set( DETransTime, Value( Now() ) ) ); Collect( Results, { Input: TextInput1.Text, French: FRTrans, FrenchTime: FRTransTime - StartTime, German: DETrans, GermanTime: DETransTime - StartTime, FrenchFaster: FRTransTime < DETransTime } )
एक डेटा तालिका नियंत्रण जोड़ें और उसके आइटम गुण को परिणाम पर सेट करें.
दाईं ओर के फलक के गुण टैब पर, फ़ील्ड संपादित करें चुनें, ताकि फ़ील्ड फलक को खोला जा सके.
फ़ील्ड की सूची में, प्रत्येक फ़ील्ड के लिए चेक बॉक्स चुनें, ताकि उन सभी को डेटा तालिका में दिखाया जा सके.
(वैकल्पिक) इनपुट फ़ील्ड को सूची के शीर्ष पर खींच कर छोड़ें और FrenchFaster फ़ील्ड को सूची के निचले भाग में खींच कर छोड़ें.
पाठ इनपुट नियंत्रण में, अनुवाद करने के लिए एक वाक्यांश लिखें या चिपकाएँ.
Alt कुंजी को दबाए रखते हुए, तालिका भरने के लिए बटन को कई बार चुनें.
समय मिलीसेकंड में दिखाए गए हैं.
कुछ मामलों में, फ़्रेंच अनुवाद जर्मन अनुवाद की तुलना में तेज़ होता है और इसके विपरीत. दोनों एक ही समय में शुरू होते हैं, लेकिन नेटवर्क लेटेंसी और सर्वर-साइड संसाधन सहित कई कारणों से एक, दूसरे से पहले दिखाया जाता है.
रेस कंडीशन तब उत्पन्न होगी, जब ऐप पहले समाप्त हो रहे अनुवाद पर निर्भर होगा. सौभाग्य से, Power Apps ऐसी अधिकांश टाइमिंग निर्भरताओं को ध्वजांकित करता है, जिनका वह पता लगा सकता है.