Κοινοποίηση μέσω


Συνάρτηση Concurrent

Ισχύει για: Εφαρμογές καμβά Εφαρμογές βάσει μοντέλου

Αξιολογεί πολλαπλούς τύπους ταυτόχρονα ο ένας με τον άλλον.

Περιγραφή

Η 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 ( a, 1 ); Set( b, a+1 ) ταυτόχρονα με το Set( x, 2 ); Set( y, x+2 ). Σε αυτήν την περίπτωση, οι εξαρτήσεις εντός των τύπων είναι αποδεκτές: το a θα οριστεί πριν από το b και το x θα οριστεί πριν από το y.

Ανάλογα με τη συσκευή ή το πρόγραμμα περιήγησης στο οποίο εκτελείται η εφαρμογή, μόνο λίγοι τύποι μπορεί στην πραγματικότητα να αξιολογούνται ταυτόχρονα. Concurrent Το χρησιμοποιεί τις διαθέσιμες δυνατότητες και δεν θα ολοκληρωθεί μέχρι να αξιολογηθούν όλοι οι τύποι.

Εάν ενεργοποιήσετε τη Διαχείριση σφαλμάτων σε επίπεδο τύπου (στις σύνθετες ρυθμίσεις), επιστρέφεται από Concurrentτην , διαφορετικά επιστρέφεται κενό . Εάν όλοι οι τύποι είναι επιτυχείς, επιστρέφεται true. Εάν αποτύχει ένας τύπος, διακόπτεται η αξιολόγηση αυτού του τύπου, αλλά συνεχίζεται η αξιολόγηση άλλων τύπων.

Μπορείτε να χρησιμοποιήσετε Concurrent μόνο σε τύπους συμπεριφοράς.

Σύνταξη

Concurrent( Formula1, Formula2 [, ...] )

  • Τύποι – Απαιτείται. Τύποι για ταυτόχρονη αξιολόγηση. Πρέπει να εισαγάγετε δύο τύπους τουλάχιστον.

Παραδείγματα

Ταχύτερη φόρτωση δεδομένων

  1. Δημιουργήστε μια εφαρμογή και προσθέστε τέσσερις προελεύσεις δεδομένων από το Microsoft Dataverse, τον SQL Server ή το SharePoint.

    Αυτό το παράδειγμα χρησιμοποιεί τέσσερις πίνακες από το δείγμα βάσης δεδομένων "Adventure Works" στο SQL Azure. Αφού δημιουργήσετε τη βάση δεδομένων, συνδεθείτε σε αυτή από το Power Apps χρησιμοποιώντας το πλήρως προσδιορισμένο όνομα διακομιστή (για παράδειγμα, srvname.database.windows.net):

    Συνδεθείτε στη βάση δεδομένων Adventure Works στο Azure.

  2. Προσθέστε ένα στοιχείο ελέγχου Button και ορίστε την ιδιότητά του OnSelect σε αυτόν τον τύπο:

    ClearCollect( Product, '[SalesLT].[Product]' );
    ClearCollect( Customer, '[SalesLT].[Customer]' );
    ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' );
    ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' )
    
  3. Στο Microsoft Edge ή στο Google Chrome, ενεργοποιήστε τα εργαλεία για προγραμματιστές για την εποπτεία της κυκλοφορίας δικτύου κατά την εκτέλεση της εφαρμογής σας.

  4. (προαιρετικό) Ενεργοποιήστε τον περιορισμό δικτύου για να μεγιστοποιήσετε τα αποτελέσματα αυτής της σύγκρισης.

  5. Κρατώντας πατημένο το πλήκτρο Alt, επιλέξτε το κουμπί και, στη συνέχεια, παρακολουθήστε την κυκλοφορία δικτύου.

    Τα εργαλεία εμφανίζουν τέσσερις αιτήσεις που εκτελούνται σε σειρά, όπως σε αυτό το παράδειγμα. Οι πραγματικοί χρόνοι έχουν καταργηθεί καθώς διαφέρουν σημαντικά. Το γράφημα εμφανίζει ότι κάθε κλήση ξεκινά όταν ολοκληρωθεί η τελευταία:

    Γράφημα χρόνου τεσσάρων αιτήσεων δικτύου, όπου κάθε μία ξεκινά μετά την ολοκλήρωση της τελευταίας, που καλύπτει ολόκληρο το χρονικό διάστημα.

  6. Αποθηκεύστε, κλείστε και ανοίξτε ξανά την εφαρμογή.

    Το Power Apps αποθηκεύει τα δεδομένα σε cache, συνεπώς εάν επιλέξετε ξανά το κουμπί δεν θα προκαλέσει απαραίτητα τέσσερις νέες αιτήσεις. Κάθε φορά που θέλετε να ελέγξετε τις επιδόσεις, κλείστε και ανοίξτε την εφαρμογή σας. Εάν ενεργοποιήσατε τον περιορισμό δικτύου, ίσως θέλετε να τον απενεργοποιήσετε, μέχρι να είστε έτοιμοι για μια άλλη δοκιμή.

  7. Προσθέστε ένα δεύτερο στοιχείο ελέγχου Button και ορίστε την ιδιότητά του OnSelect σε αυτόν τον τύπο:

    Concurrent(
        ClearCollect( Product, '[SalesLT].[Product]' ),
        ClearCollect( Customer, '[SalesLT].[Customer]' ),
        ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' ),
        ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' )
    )
    

    Σημειώστε ότι προσθέσατε τις ίδιες κλήσεις ClearCollect με το πρώτο κουμπί, αλλά περικλείονται σε μια Concurrent συνάρτηση και διαχωρίζονται με κόμματα αυτήν τη φορά.

  8. Εκκαθαρίστε την εποπτεία δικτύου στο πρόγραμμα περιήγησης.

  9. Εάν χρησιμοποιήσατε περιορισμό δικτύου προηγουμένως, ενεργοποιήστε τον ξανά.

  10. Κρατώντας πατημένο το πλήκτρο Alt, επιλέξτε το δεύτερο κουμπί και, στη συνέχεια, παρακολουθήστε την κυκλοφορία δικτύου.

    Τα εργαλεία εμφανίζουν τέσσερις αιτήσεις που εκτελούνται ταυτόχρονα, όπως σε αυτό το παράδειγμα. Και πάλι, οι πραγματικοί χρόνοι έχουν καταργηθεί καθώς διαφέρουν σημαντικά. Το γράφημα εμφανίζει όλες τις κλήσεις να ξεκινούν περίπου την ίδια στιγμή και δεν υπάρχει αναμονή για να ολοκληρωθεί η προηγούμενη:

    Γράφημα χρόνου τεσσάρων αιτήσεων δικτύου που ξεκινούν ταυτόχρονα και απαιτούν περίπου το μισό χρονικό διάστημα.

    Αυτά τα γραφήματα βασίζονται στην ίδια κλίμακα. Χρησιμοποιώντας το Concurrent, μειώσατε στο μισό τον συνολικό χρόνο που απαιτείται για την ολοκλήρωση αυτών των λειτουργιών.

  11. Αποθηκεύστε, κλείστε και ανοίξτε ξανά την εφαρμογή.

Συνθήκη ανταγωνισμού

  1. Προσθέστε μια σύνδεση με την υπηρεσία Microsoft Translator στην εφαρμογή σας.

  2. Προσθέστε ένα στοιχείο ελέγχου Text input και μετονομάστε το σε TextInput1 αν έχει διαφορετικό όνομα.

  3. Προσθέστε ένα στοιχείο ελέγχου 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
        }
    )
    
  4. Προσθέστε ένα στοιχείο ελέγχου Data table και ορίστε την ιδιότητά του Items σε Results.

  5. Στην καρτέλα Ιδιότητες στο δεξιό τμήμα παραθύρου, επιλέξτε Επεξεργασία πεδίων για να ανοίξετε το παράθυρο Πεδία.

  6. Στη λίστα των πεδίων, επιλέξτε το πλαίσιο ελέγχου για κάθε πεδίο για να εμφανιστούν όλα τα πεδία στον πίνακα δεδομένων.

  7. (προαιρετικό) Σύρετε το πεδίο Input στο επάνω μέρος της λίστας και σύρετε το πεδίο FrenchFaster στο κάτω μέρος της λίστας.

    Λίστα πεδίων στη συλλογή

  8. Στο στοιχείο ελέγχου Text input, πληκτρολογήστε ή επικολλήστε μια φράση για να την μεταφράσετε.

  9. Κρατώντας πατημένο το πλήκτρο Alt, επιλέξτε το κουμπί πολλές φορές για να συμπληρώσετε τον πίνακα.

    Οι χρόνοι εμφανίζονται σε χιλιοστά του δευτερολέπτου.

    Εμφάνιση του πίνακα δεδομένων που περιέχει τα αποτελέσματα της μετάφρασης της συμβολοσειράς

    Σε ορισμένες περιπτώσεις, η γαλλική μετάφραση είναι ταχύτερη από τη μετάφραση στα γερμανικά και το αντίστροφο. Και οι δύο ξεκινούν ταυτόχρονα, αλλά η μία επιστρέφει πριν από την άλλη για διάφορους λόγους, συμπεριλαμβανομένου του λανθάνοντος χρόνου δικτύου και της επεξεργασίας στην πλευρά του διακομιστή.

    Θα προέκυπτε μια συνθήκη ανταγωνισμού εάν η εφαρμογή εξαρτιόταν από την ολοκλήρωση μιας μετάφρασης πριν από την άλλη. Ευτυχώς, το Power Apps επισημαίνει τις περισσότερες χρονικές εξαρτήσεις που εντοπίζει.