Συνάρτηση Concurrent
Ισχύει για: Εφαρμογές καμβά Εφαρμογές βάσει μοντέλου
Αξιολογεί πολλαπλούς τύπους ταυτόχρονα ο ένας με τον άλλον.
Περιγραφή
Η Ταυτόχρονη λειτουργία επιτρέπει την ταυτόχρονη αξιολόγηση πολλαπλών τύπων που καθορίζονται στην ίδια ιδιότητα, ή εάν έχουν κλήσεις σύνδεσης Dataverse. Κανονικά, πολλαπλοί τύποι αξιολογούνται δένοντάς τους μαζί με το ; τελεστή (ημιτελής), ο οποίος αξιολογεί κάθε τύπο διαδοχικά. Με τη συνάρτηση Ταυτόχρονα, η εφαρμογή θα αξιολογεί ταυτόχρονα όλους τους τύπους μιας ιδιότητας, ακόμη και μετά τη χρήση του ; χειριστή. Αυτός ο συγχρονισμός θα βοηθήσει τους χρήστες να περιμένουν λιγότερο για το ίδιο αποτέλεσμα.
Στην OnStartιδιοκτησία της εφαρμογής σας, χρησιμοποιείστε Ταυτόχρονα για να βελτιώσετε την απόδοση όταν η εφαρμογή φορτώνει δεδομένα. Όταν οι κλήσεις δεδομένων δεν ξεκινούν μέχρι να ολοκληρωθούν οι προηγούμενες κλήσεις, η εφαρμογή πρέπει να περιμένει για το άθροισμα χρόνου όλων των αιτήσεων. Εάν οι κλήσεις δεδομένων ξεκινούν ταυτόχρονα, η εφαρμογή πρέπει να περιμένει μόνο για τον μεγαλύτερο χρόνο αιτήματος. Τα προγράμματα περιήγησης Ιστού συχνά βελτιώνουν την απόδοση εκτελώντας κλήσεις δικτύου ταυτόχρονα.
Δεν μπορείτε να προβλέψετε τη σειρά με την οποία οι τύποι στη συνάρτηση 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( a, 1 ); Set( b, a+1 ) ταυτόχρονα με τον τύπο Set( x, 2 ); Set( y, x+2 ). Σε αυτήν την περίπτωση, οι εξαρτήσεις εντός των τύπων είναι αποδεκτές: το a θα οριστεί πριν από το b και το x θα οριστεί πριν από το y.
Ανάλογα με τη συσκευή ή το πρόγραμμα περιήγησης στο οποίο εκτελείται η εφαρμογή, μόνο λίγοι τύποι μπορεί στην πραγματικότητα να αξιολογούνται ταυτόχρονα. Το Concurrent χρησιμοποιεί τις διαθέσιμες δυνατότητες και δεν θα ολοκληρωθεί μέχρι να αξιολογηθούν όλοι οι τύποι.
Εάν ενεργοποιήσετε τη Διαχείριση σφαλμάτων σε επίπεδο τύπου (στις σύνθετες ρυθμίσεις), επιστρέφεται από την Concurrent το πρώτο σφάλμα που παρουσιάζεται στη σειρά ορισμάτων, διαφορετικά επιστρέφεται κενό. Εάν όλοι οι τύποι είναι επιτυχείς, επιστρέφεται true. Εάν αποτύχει ένας τύπος, διακόπτεται η αξιολόγηση αυτού του τύπου, αλλά συνεχίζεται η αξιολόγηση άλλων τύπων.
Μπορείτε να χρησιμοποιήσετε τη συνάρτηση Concurrent μόνο σε τύπους συμπεριφοράς.
Σύνταξη
Ταυτόχρονος ( Τύπος1; Τύπος2[ , ...] )
- Τύποι – Απαιτείται. Τύποι για ταυτόχρονη αξιολόγηση. Πρέπει να εισαγάγετε δύο τύπους τουλάχιστον.
Παραδείγματα
Ταχύτερη φόρτωση δεδομένων
Δημιουργήστε μια εφαρμογή και προσθέστε τέσσερις προελεύσεις δεδομένων από το Microsoft Dataverse, τον SQL Server ή το SharePoint.
Αυτό το παράδειγμα χρησιμοποιεί τέσσερις πίνακες από το δείγμα βάσης δεδομένων "Adventure Works" στο SQL Azure. Αφού δημιουργήσετε τη βάση δεδομένων, συνδεθείτε σε αυτή από το Power Apps χρησιμοποιώντας το πλήρως προσδιορισμένο όνομα διακομιστή (για παράδειγμα, srvname.database.windows.net):
Προσθέστε ένα στοιχείο ελέγχου 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 αποθηκεύει τα δεδομένα σε cache, συνεπώς εάν επιλέξετε ξανά το κουμπί δεν θα προκαλέσει απαραίτητα τέσσερις νέες αιτήσεις. Κάθε φορά που θέλετε να ελέγξετε τις επιδόσεις, κλείστε και ανοίξτε την εφαρμογή σας. Εάν ενεργοποιήσατε τον περιορισμό δικτύου, ίσως θέλετε να τον απενεργοποιήσετε, μέχρι να είστε έτοιμοι για μια άλλη δοκιμή.
Προσθέστε ένα δεύτερο στοιχείο ελέγχου Button και ορίστε την ιδιότητά του OnSelect σε αυτόν τον τύπο:
Concurrent( ClearCollect( Product, '[SalesLT].[Product]' ), ClearCollect( Customer, '[SalesLT].[Customer]' ), ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' ), ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' ) )
Σημειώστε ότι έχετε προσθέσει τις ίδιες κλήσεις ClearCollect με το πρώτο κουμπί, αλλά περικλείονται σε μια συνάρτηση Concurrent και διαχωρίζονται με κόμματα αυτήν τη φορά.
Εκκαθαρίστε την εποπτεία δικτύου στο πρόγραμμα περιήγησης.
Εάν χρησιμοποιήσατε περιορισμό δικτύου προηγουμένως, ενεργοποιήστε τον ξανά.
Κρατώντας πατημένο το πλήκτρο Alt, επιλέξτε το δεύτερο κουμπί και, στη συνέχεια, παρακολουθήστε την κυκλοφορία δικτύου.
Τα εργαλεία εμφανίζουν τέσσερις αιτήσεις που εκτελούνται ταυτόχρονα, όπως σε αυτό το παράδειγμα. Και πάλι, οι πραγματικοί χρόνοι έχουν καταργηθεί, καθώς θα διαφέρουν σημαντικά. Το γράφημα εμφανίζει όλες τις κλήσεις να ξεκινούν περίπου την ίδια στιγμή και δεν υπάρχει αναμονή για να ολοκληρωθεί η προηγούμενη:
Αυτά τα γραφήματα βασίζονται στην ίδια κλίμακα. Με τη χρήση της Concurrent, το συνολικό χρονικό διάστημα που απαιτείται για την ολοκλήρωση αυτών των λειτουργιών μειώθηκε στο μισό.
Αποθηκεύστε, κλείστε και ανοίξτε ξανά την εφαρμογή.
Συνθήκη ανταγωνισμού
Προσθέστε μια σύνδεση με την Microsoft υπηρεσία μεταφραστή στην εφαρμογή σας.
Προσθέστε ένα στοιχείο ελέγχου Text input και μετονομάστε το σε TextInput1 αν έχει διαφορετικό όνομα.
Προσθέστε ένα στοιχείο ελέγχου Button και ορίστε την ιδιότητά του 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 } )
Προσθέστε ένα στοιχείο ελέγχου Data table και ορίστε την ιδιότητά του Items σε Results.
Στην καρτέλα Ιδιότητες στο δεξιό τμήμα παραθύρου, επιλέξτε Επεξεργασία πεδίων για να ανοίξετε το παράθυρο Πεδία.
Στη λίστα των πεδίων, επιλέξτε το πλαίσιο ελέγχου για κάθε πεδίο για να εμφανιστούν όλα τα πεδία στον πίνακα δεδομένων.
(προαιρετικό) Σύρετε το πεδίο Input στο επάνω μέρος της λίστας και σύρετε το πεδίο FrenchFaster στο κάτω μέρος της λίστας.
Στο στοιχείο ελέγχου Text input, πληκτρολογήστε ή επικολλήστε μια φράση για να την μεταφράσετε.
Κρατώντας πατημένο το πλήκτρο Alt, επιλέξτε το κουμπί πολλές φορές για να συμπληρώσετε τον πίνακα.
Οι χρόνοι εμφανίζονται σε χιλιοστά του δευτερολέπτου.
Σε ορισμένες περιπτώσεις, η γαλλική μετάφραση είναι ταχύτερη από τη μετάφραση στα γερμανικά και το αντίστροφο. Και οι δύο ξεκινούν την ίδια στιγμή, αλλά η μία επιστρέφεται πριν από την άλλη για διάφορους λόγους, όπως είναι ο λανθάνων χρόνος δικτύου και η επεξεργασία από την πλευρά του διακομιστή.
Θα προέκυπτε μια συνθήκη ανταγωνισμού εάν η εφαρμογή εξαρτιόταν από την ολοκλήρωση μιας μετάφρασης πριν από την άλλη. Ευτυχώς, το Power Apps επισημαίνει τις περισσότερες χρονικές εξαρτήσεις που εντοπίζει.