Share via


Concurrent-funksjon

Gjelder: Lerretsapper Modelldrevne apper

Evaluerer flere formler samtidig mot hverandre.

Bekrivelse

Concurrent-funksjonen tillater at flere formler som er angitt i samme egenskap, kan evalueres samtidig hvis de har en kobling eller Dataverse-kall. Vanligvis evalueres flere formler ved å koble dem sammen med operatoren ; (semikolon), som evaluerer hver formel sekvensielt. Med Concurrent-funksjonen evaluerer appen alle formler innenfor en egenskap samtidig selv etter at du har brukt operatoren ; (semikolon). Denne samtidigheten hjelper brukere med å vente mindre på samme resultat.

Bruk Concurrent i egenskapen OnStart i appen for å forbedre ytelsen når appen laster data. Når datakall ikke starter før det forrige avsluttes, må appen vente på summen av alle forespørselstidene. Hvis datakallene begynner samtidig, må appen bare vente på den lengste forespørselstiden. Nettlesere forbedrer ofte ytelsen ved å utføre nettverkskall samtidig.

Du kan ikke forutse rekkefølgen formlene i Concurrent-funksjonen begynner og avslutter evalueringen. Formler i Concurrent-funksjonen bør ikke inneholde avhengigheter av andre formler i samme Concurrent-funksjon, og Power Apps viser en feilmelding hvis du prøver dette. Du kan helt trygt ha avhengigheter på formler utenfor Concurrent-funksjonen, da de fullføres før Concurrent-funksjonen starter. Formler etter Concurrent-funksjonen kan trygt inneholde avhengigheter på formler innenfor: de vil alle fullføres før Concurrent-funksjonen avsluttes og fortsette til neste formel i kjeden (hvis du bruker operatoren ;). Vær oppmerksom på umerkelige rekkefølgeavhengigheter hvis du påkaller funksjoner eller tjenestemetoder som har bivirkninger.

Du kan koble formler sammen med operatoren ; i et argument til Concurrent. For eksempel: Concurrent( Set( a, 1 ); Set( b, a+1 ), Set( x, 2 ); Set( y, x+2 ) ) evaluerer Set( a, 1 ); Set( b, a+1 ) samtidig med Set( x, 2 ); Set( y, x+2 ). I dette tilfellet er det helt greit med avhengigheter inni formlene: a angis før b, og x angis før y.

Det kan hende at bare en håndfull formler evalueres samtidig, avhengig av enheten eller nettleseren som kjører appen. Concurrent bruker de tilgjengelige egenskapene og avsluttes ikke før alle formlene har blitt evaluert.

Hvis du aktiverer Feiladministrasjon på formelnivå (i avanserte innstillinger), returneres den første feilen som oppdages i argumentrekkefølgen fra Concurrent. Ellers returneres tom. Hvis alle formlene er vellykkede, returneres sann. Hvis én formel mislykkes, stanser resten av den formelen, men andre formler fortsetter evalueringen.

Du kan bare bruke Concurrent i formler for virkemåte.

Syntaks

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

  • Formula(s) – obligatorisk. Formler som skal evalueres samtidig. Du må oppgi minst to formler.

Eksempler

Å laste inn data raskere

  1. Opprett en app, og legg til fire datakilder fra Microsoft Dataverse, SQL Server eller SharePoint.

    Dette eksemplet bruker fire tabeller fra eksemplet Adventure Works-databasen på SQL Azure. Etter at du har opprettet databasen, kobler du til den fra Power Apps ved bruk av det fullstendige servernavnet (for eksempel, srvname.database.windows.net):

    Koble til Adventure Works-databasen i Azure.

  2. Legg til en Button-kontroll, og sett OnSelect-egenskapen til denne formelen:

    ClearCollect( Product, '[SalesLT].[Product]' );
    ClearCollect( Customer, '[SalesLT].[Customer]' );
    ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' );
    ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' )
    
  3. Slå på utviklerverktøyene for å overvåke nettverkstrafikken mens appen kjører, i Microsoft Edge eller Google Chrome.

  4. (valgfritt) Slå på nettverksbegrensning for å overdrive effektene av denne sammenligningen.

  5. Velg knappen mens du holder nede ALT, og deretter kan du se nettverkstrafikken.

    Verktøyene viser fire forespørsler som utføres i serier, lik dette eksemplet. Faktiske tider har blitt fjernet da det er store variasjoner. Diagrammet viser at hver kall begynner etter at det foregående er fullført:

    Tidsdiagram over fire nettverksforespørsler der hver av dem starter etter at det foregående er fullført. Dette dekker hele tidsintervallet.

  6. Lagre, lukk, og åpne appen på nytt.

    Power Apps bufrer dataene. Det vil si at hvis du velger knappen på nytt, blir det ikke nødvendigvis fire nye forespørsler. Hver gang du ønsker å teste ytelsen, lukker du og åpner appen på nytt. Hvis du har slått på nettverksbegrensning, kan du slå dette av til du er klar for å utføre en ny test.

  7. Legg til en ny Button-kontroll, og angi OnSelect-egenskapen til denne formelen:

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

    Vær oppmerksom på at du la til det samme ClearCollect-kallene i den første knappen, men de er denne gangen innpakket i en Concurrent-funksjon og adskilt med komma.

  8. Fjern nettverksovervåking i nettleseren.

  9. Hvis du brukte nettverksbegrensning før, kan du slå dette på igjen.

  10. Velg den andre knappen mens du holder nede ALT, og deretter kan du se nettverkstrafikken.

    Verktøyene viser fire forespørsler som utføres samtidig, som i dette eksemplet. Faktiske tider har på nytt blitt fjernet da det er store variasjoner. Diagrammet viser at alle kallene begynner omtrent samtidig og at de ikke venter på at det foregående skal fullføres:

    Tidsdiagram over fire nettverksforespørsler der alle fire starter samtidig. Dette dekker omtrent halve tidsintervallet.

    Disse diagrammene er basert på den samme skalaen. Ved å bruke Concurrent halverte du tiden det tok disse operasjonene å fullføre.

  11. Lagre, lukk, og åpne appen på nytt.

Kappløpssituasjon

  1. Legg til en tilkobling til Microsoft Translator-tjenesten i appen.

  2. Legg til en Text input-kontroll, og gi den det nye navnet TextInput1 hvis den har et annet navn.

  3. Legg til en Button-kontroll, og sett OnSelect-egenskapen til denne formelen:

    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. Legg til en Data table-kontroll, og angi Items-egenskapen til Resultater.

  5. Velg Rediger feltEgenskaper-fanen i den høyre ruten for å åpne Felt-ruten.

  6. Merk av for hvert felt i listen over felter for å vise alle i datatabellen.

  7. (valgfritt) Dra Inndata-feltet øverst i listen, og dra FrenchFaster-feltet nederst i listen.

    Liste over felter i Resultat-samlingen.

  8. Skriv eller lim inn ordene som skal oversettes, i Text input-kontrollen.

  9. Velg knappen flere ganger for å fylle tabellen mens du holder nede ALT.

    Tidene vises i millisekunder.

    Visning av datatabellen som inneholder resultatene av oversettelsen av strengen Hello World til fransk og tysk. Noen ganger er den franske oversettelsen raskere enn den tyske, og noen ganger er det omvendt.

    I enkelte tilfeller er den franske oversettelsen raskere enn den tyske oversettelsen og omvendt. Begge starter samtidig, men den ene returnerer før den andre av en rekke årsaker, inkludert nettverksventetid og behandling på serversiden.

    En kappløpssituasjon vil oppstå hvis appen er avhengig av at én oversettelse avsluttes først. Power Apps flagger heldigvis de fleste tidsberegningsavhengigheter den kan oppdage.