Delen via


De functie Concurrent

Van toepassing op: Canvas-apps Modelgestuurde apps

Hiermee evalueert u meerdere formules gelijktijdig met elkaar.

Omschrijving

De functie Concurrent maakt het mogelijk om meerdere formules die binnen dezelfde eigenschap zijn gespecificeerd, tegelijkertijd te laten evalueren als aanroepen voor connectors of Dataverse hebben. Normaal gesproken worden meerdere formules geëvalueerd door ze aan elkaar te koppelen met de operator ; (puntkomma), die elke formule opeenvolgend evalueert. Met de functie Concurrent evalueert de app alle formules binnen een eigenschap gelijktijdig, zelfs na gebruik van de operator ' ; '. Door deze gelijktijdigheid hoeven gebruikers minder lang op hetzelfde resultaat te wachten.

In de eigenschap OnStart van uw app gebruikt u Concurrent om de prestaties te verbeteren wanneer de app gegevens laadt. Wanneer gegevensaanroepen pas beginnen als de eerdere aanroepen zijn voltooid, moet de app wachten op de som van alle aanvraagtijden. Als gegevensaanroepen gelijktijdig beginnen, hoeft de app alleen maar te wachten op de langste aanvraagtijd. In webbrowsers worden de prestaties vaak verbeterd door netwerkaanroepen gelijktijdig uit te voeren.

U kunt de volgorde waarin formules binnen de functie Concurrent beginnen en stoppen met evalueren niet voorspellen. Formules in de functie Concurrent mogen geen afhankelijkheden ten opzichte van andere formules binnen dezelfde functie Concurrent bevatten. Power Apps geeft een fout weer als u dat probeert. Van binnenuit kunt u afhankelijkheden op formules buiten de functie Concurrent plaatsen, omdat deze worden voltooid voordat de functie Concurrent start. Formules na de functie Concurrent kunnen veilig gebruikmaken van afhankelijkheden van formules binnenin: ze worden allemaal voltooid voordat de functie Concurrent is voltooid en verdergaat met de volgende formule in een keten (als u de operator ; gebruikt). Kijk uit voor subtiele volgordeafhankelijkheden als u functies of servicemethoden aanroept die neveneffecten hebben.

U kunt formules aan elkaar koppelen met de operator ; binnen een argument voor Concurrent. Concurrent( Set( a, 1 ); Set( b, a+1 ), Set( x, 2 ); Set( y, x+2 ) ) evalueert bijvoorbeeld Set( a, 1 ); Set( b, a+1 ) gelijktijdig met Set( x, 2 ); Set( y, x+2 ). In dit geval zijn de afhankelijkheden binnen de formules prima: a wordt ingesteld voor b en x wordt ingesteld voor y.

Afhankelijk van het apparaat of de browser waarin de app wordt uitgevoerd, kan mogelijk slechts een handvol formules gelijktijdig worden geëvalueerd. Concurrent maakt gebruik van de beschikbare mogelijkheden en is pas klaar als alle formules zijn geëvalueerd.

Als u Foutbeheer op formuleniveau inschakelt (in de geavanceerde instellingen), wordt de eerste fout die wordt gevonden in argumentvolgorde geretourneerd vanaf Concurrent; anders wordt leeg geretourneerd. Als alle formules slagen, wordt true geretourneerd. Als een formule mislukt, stopt de rest van die formule; andere formules blijven echter evalueren.

U kunt Concurrent alleen gebruiken in gedragsformules.

Syntaxis

Gelijktijdig( Formule1, Formule2 [, ...] )

  • Formules – Verplicht. Formules voor gelijktijdige evaluatie. U moet ten minste twee formules opgeven.

Voorbeelden

Gegevens sneller laden

  1. Maak een app en voeg vier gegevensbronnen toe vanuit Microsoft Dataverse, SQL Server of SharePoint.

    Dit voorbeeld maakt gebruik van vier tabellen uit de Adventure Works-voorbeelddatabase voor SQL Azure. Nadat u de database hebt gemaakt, maakt u er verbinding mee vanuit Power Apps met behulp van de volledig gekwalificeerde servernaam (bijvoorbeeld srvname.database.windows.net):

    Verbinding maken met de database van Adventure Works in Azure.

  2. Voeg een besturingselement van het type Button toe en stel de bijbehorende eigenschap OnSelect in op deze formule:

    ClearCollect( Product, '[SalesLT].[Product]' );
    ClearCollect( Customer, '[SalesLT].[Customer]' );
    ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' );
    ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' )
    
  3. In Microsoft Edge of Google Chrome schakelt u ontwikkelhulpprogramma's in om netwerkverkeer te bewaken terwijl uw app wordt uitgevoerd.

  4. (optioneel) Schakel netwerkbeperking in om de effecten van deze vergelijking te overdrijven.

  5. Houd de Alt-toets ingedrukt, selecteer de knop en bekijk het netwerkverkeer.

    In de hulpprogramma's worden vier aanvragen weergegeven die worden uitgevoerd in de reeks, vergelijkbaar met dit voorbeeld. De werkelijke tijden zijn verwijderd, aangezien deze sterk variëren. In het diagram ziet u dat elke aanroep start nadat de laatste is voltooid:

    Tijdgrafiek van vier netwerkaanvragen, elke aanvraag start nadat de laatste is voltooid en is van toepassing op de hele periode.

  6. Bewaar en sluit de app en open deze opnieuw.

    Power Apps slaat gegevens op in de cache. Wanneer u de knop opnieuw selecteert, leidt dat daarom niet per se tot vier nieuwe aanvragen. Elke keer dat u de prestaties wilt testen, sluit u de app en opent u deze opnieuw. Als u netwerkbeperking hebt ingeschakeld, kunt u dit uitschakelen totdat u klaar bent voor een andere test.

  7. Voeg een tweede besturingselement van het type Button toe en stel de bijbehorende eigenschap OnSelect in op deze formule:

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

    Denk erom dat u dezelfde ClearCollect-aanroepen hebt toegevoegd aan de eerste knop, maar deze zijn nu verpakt in een Concurrent-functie en van elkaar gescheiden door komma's.

  8. Wis de netwerkmonitor in de browser.

  9. Als u eerder netwerkbeperking gebruikte, kunt u dit weer inschakelen.

  10. Houd de Alt-toets ingedrukt, selecteer de tweede knop en bekijk het netwerkverkeer.

    In de hulpprogramma's worden vier aanvragen weergegeven die gelijktijdig worden uitgevoerd, vergelijkbaar met dit voorbeeld. Ook nu zijn de werkelijke tijden verwijderd, aangezien deze sterk variëren. In het diagram ziet u dat alle aanroepen ongeveer tegelijkertijd beginnen en niet wachten tot de vorige is voltooid:

    Tijdgrafiek van vier netwerkaanvragen, die alle vier samen starten en ongeveer de helft van de hoeveelheid tijd bestrijken.

    Deze grafieken zijn gebaseerd op dezelfde schaal. Door Concurrent te gebruiken, hebt u de totale hoeveelheid tijd die deze bewerkingen duurden, gehalveerd.

  11. Bewaar en sluit de app en open deze opnieuw.

Racevoorwaarde

  1. Voeg een verbinding met de Microsoft Translator service toe aan uw app.

  2. Voeg een besturingselement van het type Text input toe en geef dit de naam TextInput1 als het een andere naam heeft.

  3. Voeg een besturingselement van het type Button toe en stel de bijbehorende eigenschap OnSelect in op deze formule:

    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. Voeg een besturingselement van het type Data table toe en stel de eigenschap Items in op Resultaten.

  5. Selecteer op het tabblad Eigenschappen van het rechterdeelvenster de optie Velden bewerken om het deelvenster Velden te openen.

  6. Schakel in de lijst met velden het selectievakje voor elk veld in om ze allemaal weer te geven in de gegevenstabel.

  7. (optioneel) Sleep het veld Invoer naar de bovenkant van de lijst en sleep het veld FrenchFaster naar de onderkant van de lijst.

    Lijst met velden in de verzameling Resultaten.

  8. In het besturingselement Text input typt of plakt u een te vertalen woordgroep.

  9. Houd de Alt-toets ingedrukt en selecteer de knop meerdere keren om de tabel te vullen.

    De tijden worden in milliseconden weergegeven.

    Weergave van de gegevenstabel met de resultaten van het vertalen van de tekenreeks

    In sommige gevallen is de Franse vertaling sneller dan de Duitse vertaling, en vice versa. Beide starten op hetzelfde moment, maar om verschillende redenen, zoals netwerklatentie en verwerking aan serverzijde, wordt de een sneller dan de ander geretourneerd.

    Er zou een racevoorwaarde optreden als de app ervan afhankelijk was dat één vertaling het eerst eindigt. Gelukkig markeert Power Apps de meeste timing-afhankelijkheden die kunnen worden gedetecteerd.