Partajați prin


Concurrent funcționa

Se aplică la: Aplicații pânză bazate pe modele de aplicații

Evaluează simultan mai multe formule între ele.

Descriere

Funcția Concurrent permite ca mai multe formule specificate în aceeași proprietate să fie evaluate în același timp dacă au apeluri conector sau Dataverse. În mod normal, mai multe formule sunt evaluate prin înlănțuirea lor împreună cu operatorul (punct şi virgulă) ;, care o evaluează pe fiecare formulă secvențial. Cu funcțiaConcurrent, aplicația va evalua simultan toate formulele dintr-o proprietate, chiar și după utilizarea operatorului ; Această concurență ajută utilizatorii să aștepte mai puțin pentru același rezultat.

În proprietatea OnStart a aplicației, utilizați Concurrent pentru a îmbunătăți performanța atunci când aplicația încarcă date. Când apelurile de date nu încep până la terminarea apelurilor anterioare, aplicația trebuie să aștepte suma tuturor timpurilor de solicitare. Dacă apelurile de date încep în același timp, aplicația trebuie să aștepte doar cel mai lung timp de solicitare. Browserele web îmbunătățesc adesea performanța efectuând apeluri de rețea concomitent.

Nu puteți prezice ordinea în care formulele din cadrul funcției sunt de evaluare de Concurrent început și de sfârșit. Formulele din Concurrent funcție nu ar trebui să conțină dependențe cu alte formule din aceeași Concurrent funcție, iar Power Apps afișează o eroare dacă încercați. Din interior, puteți să luați în siguranță dependențe de formulele din afara funcției Concurrent , deoarece acestea se finalizează înainte ca funcția să Concurrent înceapă. Formulele după ce Concurrent funcția poate lua în siguranță dependențe de formulele din: toate se vor finaliza înainte Concurrent ca funcția să se termine și să se mute la următoarea formulă dintr-un lanț (dacă utilizați operatorul ; ). Fiți atent la dependențele subtile ale comenzii dacă apelați la funcții sau metode de serviciu care au efecte secundare.

Aveți posibilitatea să înlănțuiți formule împreună cu operatorul ; dintr-un argument la Concurrent. De exemplu, Concurrent( Set( a, 1 ); Set( b, a+1 ), Set( x, 2 ); Set( y, x+2 ) ) evaluează Set( a, 1 ); Set( b, a+1 ) simultan cu Set( x, 2 ); Set( y, x+2 ). În acest caz, dependențele din formule sunt în regulă: a va fi setat înainte de b și x va fi setat înainte de y.

În funcție de dispozitivul sau browserul în care rulează aplicația, doar câteva formule ar putea fi de fapt evaluate simultan. Concurrent utilizează capacitățile disponibile și nu se termină până când nu se evaluează toate formulele.

Dacă activați gestionarea erorilor la nivel de formulă (în setările complexe), prima eroare întâlnită în ordinea argumentelor este returnată de ; Concurrentaltfel, se returnează valoarea necompletată . Dacă toate formulele reușesc, true este returnat. Dacă o formulă nu reușește, restul formulei se oprește, dar alte formule continuă să se evalueze.

Puteți utiliza Concurrent doar în formule de comportament.

Sintaxă

Concurrent( Formulă1, Formulă2 [, ...] )

  • Formule – Obligatoriu. Formule de evaluat concomitent. Trebuie să furnizați cel puțin două formule.

Exemple

Se încarcă datele mai repede

  1. Creați o aplicație și adăugați patru surse de date din Microsoft Dataverse, SQL Server sau SharePoint.

    Acest exemplu folosește patru tabele din baza de date Adventure Works eșantion din SQL Azure. După ce creați baza de date, conectați-vă la ea din Power Apps folosind numele serverului complet calificat (de exemplu, srvname.database.windows.net):

    Conectați-vă la o bază de date Adventure Works în Azure.

  2. Adăugați un control Button, apoi setați-i proprietatea OnSelect la următoarea formulă:

    ClearCollect( Product, '[SalesLT].[Product]' );
    ClearCollect( Customer, '[SalesLT].[Customer]' );
    ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' );
    ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' )
    
  3. În Microsoft Edge sau Google Chrome, activați instrumentele pentru dezvoltatori pentru a monitoriza traficul de rețea în timp ce aplicația este în funcțiune.

  4. (opțional) Activați reglarea rețelei pentru a exagera efectele acestei comparații.

  5. În timp ce țineți apăsată tasta Alt, selectați butonul, apoi urmăriți traficul în rețea.

    Instrumentele arată patru solicitări efectuate în serie, care sunt similare cu acest exemplu. Timpii reali au fost eliminați, deoarece variază în mod sălbatic. Graficul arată că fiecare apel începe după ce s-a terminat ultimul:

    Graficul privind durata călătoriei pentru patru solicitări de rețea, fiecare începând după ce ultima se încheie, acoperind întregul interval de timp.

  6. Salvați, închideți și redeschideți aplicația.

    Power Apps memorează datele în cache, astfel încât selectarea din nou a butonului nu va genera neapărat patru solicitări noi. De fiecare dată când doriți să testați performanța, închideți și redeschideți aplicația. Dacă ați activat reglarea rețelei, se recomandă să o dezactivați până când sunteți gata pentru un alt test.

  7. Adăugați un al doilea control Button, apoi setați proprietatea OnSelect la această formulă:

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

    Rețineți că ați adăugat aceleași apeluri ClearCollect la primul buton, dar acestea sunt încadrate într-o Concurrent funcție și separate prin virgulă de data aceasta.

  8. Ștergeți monitorul de rețea din browser.

  9. Dacă ați folosit reglarea rețelei înainte, activați-o din nou.

  10. În timp ce țineți apăsată tasta Alt, selectați al doilea buton, apoi urmăriți traficul în rețea.

    Instrumentele arată patru solicitări efectuate simultan, care sunt similare cu acest exemplu. Din nou, timpii reali au fost eliminați, deoarece variază sălbatic. Graficul arată că toate apelurile încep în același timp și nu așteptați să se termine cel anterior:

    Graficul privind durata călătoriei pentru patru solicitări de rețea, toate cele patru începând împreună, acoperind aproximativ jumătate din intervalul de timp.

    Aceste grafice se bazează pe aceeași scală. ConcurrentUtilizând , înjumătățiți timpul total necesar pentru terminarea acestor operațiuni.

  11. Salvați, închideți și redeschideți aplicația.

Condiție de rulare

  1. Adăugați o conexiune la serviciul Microsoft Translator pentru aplicația dvs.

  2. Adăugați un control Intrare text și redenumiți-l TextInput1 dacă are un nume diferit.

  3. Adăugați un control Buton, apoi setați-i proprietatea OnSelect la următoarea formulă:

    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. Adăugați un control Tabel de date și setați proprietatea sa Elemente la Rezultate.

  5. În fila Proprietăți din panoul din dreapta, selectați Editare câmpuri pentru a deschide panoul Câmpuri.

  6. În lista de câmpuri, bifați caseta de selectare pentru fiecare câmp pentru a le afișa pe toate în tabelul de date.

  7. (opțional) Glisați câmpul Intrare în partea de sus a listei și glisați câmpul FrenchFaster în partea de jos a listei.

    Lista câmpurilor din colecția Rezultate.

  8. În controlul Intrare text, tastați sau inserați o frază de tradus.

  9. În timp ce țineți apăsată tasta Alt, selectați butonul de mai multe ori pentru a umple tabelul.

    Timpii sunt afișați în milisecunde.

    Afișarea tabelului de date care conține rezultatele traducerii șirului „Hello World” în franceză și germană. Uneori traducerea franceză este mai rapidă decât cea în germană, iar uneori este invers.

    În unele cazuri, traducerea în franceză este mai rapidă decât traducerea în germană și invers. Ambele pornesc în același timp, dar una revine înainte de cealaltă din diverse motive, inclusiv latența rețelei și procesarea pe partea server.

    Ar putea apărea o condiție de rulare dacă aplicația ar depinde mai întâi de o singură traducere care se finalizează mai întâi. Din fericire, semnalizatorii Power Apps indică cele mai multe dependențe de sincronizare pe care le poate detecta.