Share via


Funktionen Concurrent

Gælder for: Lærredapps Modelbaserede apps

Evaluerer flere formler samtidigt.

Beskrivelse

Funktionen Samtidig kan flere formler, der er angivet i samme egenskab, evalueres på én gang, hvis de har en connector eller et Dataverse-opkald. Normalt evalueres flere formler ved at kæde dem sammen med ; (semikolon)-operatoren, som evaluerer hver formel sekventielt. Med funktionen Samtidig evalueres alle formler i en egenskab samtidig, også når du har brugt ; Operatør. Denne samtidighed hjælper brugere med at vente mindre på det samme resultat.

I appens egenskab OnStart skal du bruge Concurrent til at forbedre ydeevnen, når appen indlæser data. Når datakald ikke starter, før det forrige kald er færdigt, skal appen vente på summen af alle anmodningstider. Hvis datakald starter på samme tid, skal appen kun vente på den længste anmodningstid. Webbrowsere forbedrer ofte ydeevnen ved at udføre netværksopkald samtidigt.

Du kan ikke forudsige den rækkefølge, som formler i funktionen Concurrent starter og slutter evalueringen på. Formler i funktionen Concurrent må ikke indeholde afhængigheder af andre formler i den samme Concurrent-funktion, og Power Apps viser en fejl, hvis du prøver på det. Inde fra funktionen Concurrent kan du definere afhængigheder af formler uden for funktionen uden problemer, fordi de gennemføres, før funktionen Concurrent starter. Formler efter funktionen Concurrent kan uden problemer have defineret afhængigheder af formler indefra: de gennemføres alle, før funktionen Concurrent afsluttes og går videre til den næste formel i en kæde (hvis du bruger operatoren ;). Hold øje med umærkelige rækkefølgeafhængigheder, hvis du kalder funktioner eller servicemetoder, der har sideeffekter.

Du kan kæde formler sammen med operatoren ; inden for et argument til Concurrent. Concurrent( Set( a, 1 ); Set( b, a+1 ), Set( x, 2 ); Set( y, x+2 ) ) evaluerer f.eks. Set( a, 1 ); Set( b, a+1 ) samtidigt med Set( x, 2 ); Set( y, x+2 ). I dette tilfælde er det fint at have afhængigheder inden for formlerne: a bliver indstillet før b, og x bliver indstillet før y.

Afhængigt af enheden eller browseren, som appen kører på, kan kun en håndfuld formler faktisk evalueres samtidigt. Concurrent bruger de tilgængelige funktionaliteter og afsluttes ikke, før alle formularer er blevet evalueret.

Hvis du aktiverer Fejlhåndtering på formelniveau (i Avancerede indstillinger), så returneres den første fejl, der findes i argumentrækkefølge, fra Concurrent. Ellers returneres tom. Hvis alle formler gennemføres, så returneres sand. Hvis én formel mislykkes, så stopper resten af den pågældende formel, men andre formler fortsætter evalueringen.

Du kan kun bruge Concurrent i funktionsformler.

Syntaks

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

  • Formula(s) – påkrævet. Formler til samtidig evaluering. Du skal angive mindst to formler.

Eksempler

Hurtigere indlæsning af data

  1. Opret en app, og tilføj fire datakilder fra Microsoft Dataverse, SQL Server eller SharePoint.

    I dette eksempel bruges fire tabeller fra eksempeldatabasen Adventure Works på SQL Azure. Når du har oprettet databasen, kan du oprette forbindelse til den fra Power Apps vha. det fuldt kvalificerede servernavn (f.eks. srvname.database.windows.net):

    Opret forbindelse til Adventure Works-database i Azure.

  2. Tilføj et Button-kontrolelement, og indstil dets OnSelect-egenskab til denne formel:

    ClearCollect( Product, '[SalesLT].[Product]' );
    ClearCollect( Customer, '[SalesLT].[Customer]' );
    ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' );
    ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' )
    
  3. Slå udviklerværktøjer til i Microsoft Edge eller Google Chrome for at overvåge netværkstrafikken, mens appen kører.

  4. (valgfrit) Slå netværksbegrænsning til for at overdrive virkningerne af denne sammenligning.

  5. Vælg knappen, mens du holder Alt-tasten nede, og hold derefter øje med netværkstrafikken.

    Værktøjerne viser fire anmodninger, der udføres i rækkefølge, som ligner dette eksempel. De faktiske tider er blevet fjernet, da de varierer meget. Diagrammet viser, at hvert kald starter, når det sidste er afsluttet:

    Tidsgraf over fire netværksanmodninger – hver enkelt starter, når den sidste er fuldført, så hele tidsrummet dækkes.

  6. Gem, luk, og åbn appen igen.

    Power Apps cachelagrer data, så der udføres ikke nødvendigvis fire nye anmodninger, hvis du vælger knappen igen. Hver gang du vil teste ydeevnen, skal du lukke og åbne appen igen. Hvis du har slået netværksbegrænsning til, skal du måske slå den fra, indtil du er klar til en ny test.

  7. Tilføj endnu et Button-kontrolelement, og angiv dets OnSelect-egenskab til denne formel:

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

    Bemærk, at du har føjet samme ClearCollect-kald til den første knap, men de er pakket i en Concurrent-funktion og er adskilt af kommaer denne gang.

  8. Ryd netværksovervågningen i browseren.

  9. Hvis du brugte netværksbegrænsning før, skal du slå den til igen.

  10. Vælg den anden knap, mens du holder Alt-tasten nede, og hold derefter øje med netværkstrafikken.

    Værktøjerne viser fire anmodninger, som er udført samtidigt, der ligner dette eksempel. De faktiske tider er igen blevet fjernet, da de varierer meget. Diagrammet viser, at alle kald starter omtrent samtidigt, og at de ikke venter på, at det forrige er afsluttet:

    Tidsgraf over fire netværksanmodninger, hvor alle fire starter samtidigt og dækker cirka halvdelen af tidsrummet.

    Disse diagrammer er baseret på samme skala. Ved hjælp af Concurrent har du halveret den samlede mængde tid, som det tog at afslutte disse handlinger.

  11. Gem, luk, og åbn appen igen.

Konkurrencetilstand

  1. Føj en forbindelse til Microsoft Translator-tjenesten til din app.

  2. Tilføj et Text input-kontrolelement, og omdøb det til TextInput1, hvis det har et andet navn.

  3. Tilføj et Button-kontrolelement, og indstil dets OnSelect-egenskab til denne formel:

    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. Tilføj et Data table-kontrolelement, og angiv dets Items-egenskab som Resultater.

  5. På fanen Egenskaber i ruden til højre skal du vælge Rediger felter for at åbne ruden Felter.

  6. På listen over felter skal du markere afkrydsningsfeltet for hvert felt for at få vist dem alle i datatabellen.

  7. (valgfrit) Træk feltet Input til toppen af listen, og træk feltet FrenchFaster til bunden af listen.

    Listen over felter i samlingen Resultat.

  8. Indtast eller indsæt et udtryk, der skal oversættes, i Text input-kontrolelementet.

  9. Mens du holder Alt-tasten nede, skal du vælge knappen adskillelige gange for at udfylde tabellen.

    Tiderne vises i millisekunder.

    Visning af datatabellen, der indeholder resultater af at oversætte strengen

    I visse tilfælde er den franske oversættelse hurtigere end den tyske oversættelse og omvendt. Begge starter samtidigt, men én returneres før den anden af flere forskellige grunde, herunder netværksventetid og behandling på serversiden.

    En konkurrencetilstand opstår, hvis appen afhænger af, at én oversættelse blev afsluttet først. Heldigvis markerer Power Apps de fleste timingafhængigheder, som det kan registrere.