Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: Arbetsyteappar
Modelldrivna appar
Utvärderar flera formler samtidigt med varandra.
Description
Funktionen Concurrent gör att flera formler som anges i samma egenskap kan utvärderas samtidigt om de har anslutningsappar 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. Concurrent Med funktionen utvärderar appen alla formler i en egenskap samtidigt även efter att operatorn ; har använts. Den här samtidigheten hjälper användarna att vänta mindre på samma resultat.
I onstart-egenskapen för din app använder du Concurrent för att förbättra prestanda när appen 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 Concurrent i funktionens start- och slututvärdering. Formler i Concurrent funktionen får inte innehålla beroenden för andra formler i samma Concurrent funktion, och Power Apps visar ett fel om du försöker. Inifrån kan du säkert ta beroenden på formler utanför Concurrent funktionen eftersom de slutförs innan Concurrent funktionen startar. Formler efter Concurrent funktionen kan på ett säkert sätt ta beroenden av formler inom: alla slutförs innan Concurrent funktionen är klar 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 formler tillsammans med operatorn ; i ett argument till Concurrent. Till exempel Concurrent( Set( a, 1 ); Set( b, a +1 ), Set( x, 2 ); Set( y, x +2 ) ) utvärderarSet( 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 felhantering på formelnivå (i avancerade inställningar) returneras det första felet i argumentordningen från Concurrent. Annars returneras tomt . 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 bara använda Concurrent i beteendeformler.
Syntax
Concurrent( Formel1, Formel2 [, ...] )
- Formler – obligatoriskt. Formler som ska utvärderas samtidigt. Du måste ange minst två formler.
Exempel
Läsa in data snabbare
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):
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]' )I Microsoft Edge eller Google Chrome, aktiverar du utvecklarverktyg för att övervaka nätverkstrafik medan programmet körs.
(valfritt) Aktivera nätverksbegränsning för att överdriva effekterna av den här jämförelsen.
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. Faktiska tider har tagits bort eftersom de varierar kraftigt. Grafen visar att varje anrop startar efter det senaste har slutförts:
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.
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 har lagt till samma ClearCollect-anrop till den första knappen, men de är inlindade i en Concurrent funktion och avgränsade med kommatecken den här gången.
Rensa Network Monitor i webbläsaren.
Om du använde nätverksbegränsning förut aktiverar du det igen.
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. Återigen har faktiska tider tagits bort eftersom de varierar mycket. Diagrammet visar att alla anrop startar ungefär samtidigt och inte väntar på att den föregående ska slutföras:
De här graferna baseras på samma skala. Med hjälp Concurrentav halverade du den totala tiden som de här åtgärderna tog att slutföra.
Spara, stäng och öppna appen igen.
Konkurrenstillstånd
Lägg till en anslutning till Microsoft Translator-tjänsten i ditt program.
Lägg till en Text Input-kontroll och byt namn på den till TextInput1 om den har ett annat namn.
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 } )Lägg till en Datatabellkontroll och ställ in dess egenskap Items till Resultat.
På fliken Egenskaper i det högra fönstret väljer du Redigera fält för att öppna fönstret Fält.
I listan över fält markerar du kryssrutan för varje fält för att visa dem alla i datatabellen.
(valfritt) Dra fältet Indata till längst upp i listan och dra fältet FrenchFaster till längst ned i listan.
I Text Input-kontrollen skriver eller klistrar du in en fras som ska översättas.
Medan du håller ned Alt-tangenten väljer du knappen flera gånger för att fylla tabellen.
Tiderna visas i millisekunder.
I vissa fall sker den franska översättningen snabbare än den tyska översättningen och vice versa. Båda startar samtidigt, men den ena returnerar före den andra av olika skäl, inklusive nätverksfördröjning 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.