Funktionen Concurrent

Gäller appar: Arbetsyteappar Modellbaserade program

Utvärderar flera formler samtidigt med varandra.

Description

Funktionen Concurrent tillåter att flera formler specificerade inom samma egenskap utvärderas samtidigt om de har koppling eller Dataverse anrop. Vanligtvis utvärderas flera formler genom att de länkas tillsammans med operatorn ; (semikolon) som utvärderar varje formel sekventiellt i ordning. Med den samtidiga funktionen utvärderar programmet alla formeln inom en egenskap samtidigt även efter att ha använt; Operatör. Den här inkonsekvensen hjälper användarna att vänta mindre på samma resultat.

I egenskapen OnStart för ditt program använder du Concurrent för att förbättra prestandan när programmet läser in data. När dataanrop inte startar förrän de tidigare anropen slutförs måste programmet vänta på summan av alla begärandetider. Om dataanrop startar på samma gång behöver programmet endast vänta på den längsta begärandetiden. Webbläsare förbättrar ofta prestandan genom att utföra nätverksanrop samtidigt.

Du kan inte förutsäga i vilken ordning formler i funktionen Concurrent startar och avslutar utvärdering. Formler i funktionen Concurrent bör inte innehålla beroenden av andra formler i samma Concurrent-funktion, och Power Apps visar ett fel om du försöker det. Inifrån kan du utan risk ha beroenden av formler utanför funktionen Concurrent eftersom de slutförs innan funktionen Concurrent startar. Formler efter funktionen Concurrent kan utan risk ha beroenden av formlerna inuti; de slutförs alla innan funktionen Concurrent slutförs och går vidare till nästa formel i en kedja (om du använder operatorn ;). Var uppmärksam på subtila ordningsberoenden om du anropar funktioner eller tjänstmetoder som har sidoeffekter.

Du kan länka ihop formler med operatorn ; i ett argument till Concurrent. Till exempel kommer Concurrent( Set( a, 1 ); Set( b, a+1 ), Set( x, 2 ); Set( y, x+2 ) ) att utvärdera Set( a, 1 ); Set( b, a+1 ) samtidigt med Set( x, 2 ); Set( y, x+2 ). I det här fallet fungerar beroendena inom formlerna bra: a anges före b, och x anges före y.

Beroende på den enhet eller den webbläsare där programmet körs kan det hända att bara ett fåtal formler faktiskt utvärderas samtidigt. Concurrent använder de tillgängliga funktionerna och slutförs inte förrän alla formler har utvärderats.

Om du aktiverar Formula-level error management (Felhantering på formelnivå) (i de avancerade inställningarna) returneras det första felet som uppstår i argumentordningen från Concurrent. Annars returneras blank. Om alla formler lyckas returneras true. Om en formel misslyckas stoppas resten av den formeln, men andra formler fortsätter att utvärderas.

Du kan endast använda Concurrent i beteendeformler.

Syntax

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

  • Formula(s) – obligatoriskt. Formler som ska utvärderas samtidigt. Du måste ange minst två formler.

Exempel

Läsa in data snabbare

  1. Skapa ett program och lägg till fyra datakällor från Microsoft Dataverse, SQL Server eller SharePoint.

    Det här exemplet använder fyra tabeller från Adventure Works-exempeldatabasen i SQL Azure. När du har skapat databasen ansluter du till den från Power Apps med hjälp av det fullständigt kvalificerade servernamnet (till exempel srvname.database.windows.net):

    Anslut till databasen Adventure Works i Azure.

  2. Lägg till en Buttonkontroll och ställ in dess egenskap OnSelect enligt följande formel:

    ClearCollect( Product, '[SalesLT].[Product]' );
    ClearCollect( Customer, '[SalesLT].[Customer]' );
    ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' );
    ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' )
    
  3. I Microsoft Edge eller Google Chrome, aktiverar du utvecklarverktyg för att övervaka nätverkstrafik medan programmet körs.

  4. (valfritt) Aktivera nätverksbegränsning för att överdriva effekterna av den här jämförelsen.

  5. Håll ned Alt-tangenten och välj knappen, och titta sedan på nätverkstrafiken.

    Verktygen visar fyra begäranden som utförs i en serie, på ett sätt som liknar det här exemplet. De faktiska tiderna har tagits bort eftersom de varierar kraftigt. Grafen visar att varje anrop startar efter det senaste har slutförts:

    Tidsdiagram för fyra nätverksförfrågningar, var och en börjar efter de sista målen, som täcker hela tidsperioden.

  6. Spara, stäng och öppna appen igen.

    Power Apps cachelagrar data, så om du väljer knappen igen skapas inte nödvändigtvis fyra nya begäranden. Varje gång du vill testa prestandan stänger du och öppnar programmet igen. Om du har aktiverat nätverksbegränsning kan det vara bra att stänga av det tills du är redo för ett nytt test.

  7. Lägg till en till Button-kontroll och ställ in dess OnSelect-egenskap enligt följande formel:

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

    Observera att du lade till samma ClearCollect-anrop till den första knappen, men de är inneslutna i en Concurrent-funktion och avgränsade med kommatecken den här gången.

  8. Rensa Network Monitor i webbläsaren.

  9. Om du använde nätverksbegränsning förut aktiverar du det igen.

  10. Håll ned Alt-tangenten och välj den andra knappen, och titta sedan på nätverkstrafiken.

    Verktygen visar fyra begäranden som utförs samtidigt, på ett sätt som liknar det här exemplet. De faktiska tiderna har återigen tagits bort eftersom de varierar kraftigt. Grafen visar att alla anrop börjar vid ungefär samma tid och inte väntar tills det föregående slutförs:

    Tidsdiagram för fyra nätverksförfrågningar, alla fyra börjar tillsammans och täcker ungefär hälften av tiden.

    De här graferna baseras på samma skala. Genom att använda Concurrent har du halverat den totala tiden som det tog för de här åtgärderna att blir klara.

  11. Spara, stäng och öppna programmet igen.

Konkurrenstillstånd

  1. Lägg till en anslutning till Microsoft Translator-tjänsten i ditt program.

  2. Lägg till en Text Input-kontroll och byt namn på den till TextInput1 om den har ett annat namn.

  3. Lägg till en Button-kontroll och ställ in dess egenskap OnSelect enligt följande 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. Lägg till en Datatabellkontroll och ställ in dess egenskap Items till Resultat.

  5. På fliken Egenskaper i det högra fönstret väljer du Redigera fält för att öppna fönstret Fält.

  6. I listan över fält markerar du kryssrutan för varje fält för att visa dem alla i datatabellen.

  7. (valfritt) Dra fältet Indata till längst upp i listan och dra fältet FrenchFaster till längst ned i listan.

    Lista över fält i resultatsamlingen.

  8. I Text Input-kontrollen skriver eller klistrar du in en fras som ska översättas.

  9. Medan du håller ned Alt-tangenten väljer du knappen flera gånger för att fylla tabellen.

    Tiderna visas i millisekunder.

    Datatabellen visas med resultatet av översättningen av strängen

    I vissa fall sker den franska översättningen snabbare än den tyska översättningen och vice versa. Båda startar på samma gång, men en returneras före den andra av en mängd orsaker, till exempel nätverkssvarstid och bearbetning på serversidan.

    Ett konkurrenstillstånd skulle ha uppstått om programmet hade varit beroende av att en översättning blir klar först. Som tur är flaggar Power Apps de flesta tidsberoenden som den kan identifiera.