Funkcia Concurrent v službe PowerAppsConcurrent function in PowerApps

Hodnotí viacero vzorcov súbežne.Evaluates multiple formulas concurrently with one another.

DescriptionDescription

Funkcia Concurrent hodnotí viacero vzorcov súbežne.The Concurrent function evaluates multiple formulas at the same time. Za normálnych okolností sa viaceré vzorce hodnotia reťazením pomocou operátora ; (alebo ;;), kde sa každý vzorec vyhodnocuje v príslušnom poradí.Normally, multiple formulas are evaluated by chaining them together with the ; (or ;;) operator, which evaluates each sequentially in order. Keď aplikácia vykonáva operácie súbežne, používatelia na rovnaký výsledok čakajú kratšie.When the app performs operations concurrently, users wait less for the same result.

Vo vlastnosti OnStart v aplikácii môžete použiť funkciu Concurrent na zlepšenie výkonu pri načítavaní údajov aplikáciou.In the OnStart property of your app, use Concurrent to improve performance when the app loads data. Ak sa volania údajov začnú až potom, ako sa predchádzajúce volania dokončia, čas čakania aplikácie zodpovedá súčtu všetkých časov žiadostí.When data calls don't start until the previous calls finish, the app must wait for the sum of all request times. Ak volania údajov začnú v rovnakom čase, aplikácia musí počkať iba na uplynutie najdlhšieho času žiadosti.If data calls start at the same time, the app only needs to wait for the longest request time. Webové prehliadače často zlepšujú výkon súbežným vykonávaním operácií s údajmi.Web browsers often improve performance by performing data operations concurrently.

Poradie, v ktorom vzorce v rámci funkcie Concurrent začínajú a končia vyhodnotenie, nie je možné predvídať.You can't predict the order in which formulas within the Concurrent function start and end evaluation. Vzorce vo funkcii Concurrent by nemali obsahovať závislosti od iných vzorcov v rámci tej istej funkcie Concurrent. Ak sa o to pokúsite, v službe PowerApps sa zobrazí chyba.Formulas within the Concurrent function shouldn't contain dependencies on other formulas within the same Concurrent function, and PowerApps shows an error if you try. V rámci funkcie Concurrent ale môžete vytvárať závislosti od vzorcov mimo nej, pretože sa dokončia ešte pred spustením funkcie Concurrent.From within, you can safely take dependencies on formulas outside the Concurrent function because they will complete before the Concurrent function starts. Vzorce za funkciou Concurrent môžu bezpečne vytvárať závislosti od vzorcov v nej, pretože všetky sa dokončia pred dokončením funkcie Concurrent a jej prechodom na ďalší vzorec v reťazci (ak sa použil operátor ; alebo ;;).Formulas after the Concurrent function can safely take dependencies on formulas within: they'll all complete before the Concurrent function finishes and moves on to the next formula in a chain (if you use the ; or ;; operator). Ak chcete volať funkcie alebo metódy služby, ktoré majú vedľajšie účinky, dávajte si pozor na drobné závislosti v poradí.Watch out for subtle order dependencies if you're calling functions or service methods that have side effects.

Vzorce môžete reťaziť pomocou operátora ; (alebo ;;) v rámci argumentu funkcie Concurrent.You can chain formulas together with the ; (or ;;) operator within an argument to Concurrent. Vzorec Concurrent( Set( a, 1 ); Set( b, a+1 ), Set( x, 2 ); Set( y, x+2 ) ) napríklad hodnotí operácie Set( a, 1 ); Set( b, a+1 ) súbežne s operáciami Set( x, 2 ); Set( y, x+2 ).For example, Concurrent( Set( a, 1 ); Set( b, a+1 ), Set( x, 2 ); Set( y, x+2 ) ) evaluates Set( a, 1 ); Set( b, a+1 ) concurrently with Set( x, 2 ); Set( y, x+2 ). V tomto prípade sú závislosti vo vzorcoch v poriadku: a sa nastaví skôr ako b a x sa nastaví skôr ako y.In this case, the dependencies within the formulas are fine: a will be set before b, and x will be set before y.

V závislosti od zariadenia alebo prehliadača, v ktorom je aplikácia spustená, môže byť súbežne vyhodnotených iba niekoľko vzorcov.Depending on the device or browser in which the app is running, only a handful of formulas might actually be evaluated concurrently. Funkcia Concurrent používa dostupné možnosti a neskončí, kým nebudú všetky vzorce vyhodnotené.Concurrent uses the available capabilities and won't finish until all formulas have been evaluated.

Ak v rozšírených nastaveniach povolíte funkciu Správa chýb na úrovni vzorca, z funkcie Concurrent sa vráti prvá zaznamenaná chyba v argumente. V opačnom prípade sa vráti prázdna hodnota.If you enable Formula-level error management (in advanced settings), the first error encountered in argument order is returned from Concurrent; otherwise, blank is returned. Ak sú všetky vzorce správne, vráti sa hodnota true.If all formulas are successful, true is returned. Ak jeden vzorec nie je správny, zvyšok vzorca sa zastaví, ale ostatné vzorce sa budú aj naďalej vyhodnocovať.If one formula fails, the rest of that formula stops, but other formulas continue evaluating.

Funkciu Concurrent môžete používať iba vo vzorcoch správania.You can use Concurrent only in behavior formulas.

SyntaxSyntax

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

  • Vzorec – povinné.Formula(s) – Required. Vzorce, ktoré sa majú súbežne vyhodnotiť.Formulas to evaluate concurrently. Treba zadať aspoň dva vzorce.You must supply at least two formulas.

PríkladyExamples

Rýchlejšie načítavanie údajovLoading data faster

  1. Vytvorte aplikáciu a pridajte štyri zdroje údajov zo služby Common Data Service for Apps, SQL Servera alebo SharePointu.Create an app, and add four data sources from Common Data Service for Apps, SQL Server, or SharePoint.

    V tomto príklade sa používajú štyri tabuľky zo vzorovej databázy Adventure Works v službe SQL Azure.This example uses four tables from the sample Adventure Works database on SQL Azure. Po vytvorení databázy sa k nej pripojte zo služby PowerApps pomocou úplného názvu servera (napríklad srvname.database.windows.net):After you create the database, connect to it from PowerApps using the fully qualified server name (for example, srvname.database.windows.net):

    Pripojenie k databáze Adventure Works v službe Azure

  2. Pridajte ovládací prvok Button (Tlačidlo) a nastavte jeho vlastnosť OnSelect na tento vzorec:Add a Button control, and set its OnSelect property to this formula:

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

  3. V prehliadači Microsoft Edge alebo Google Chrome zapnite vývojárske nástroje, aby ste počas spustenia aplikácie mohli sledovať sieťový prenos.In Microsoft Edge or Google Chrome, turn on developer tools to monitor network traffic while your app is running.

  4. (voliteľné) Ak chcete, aby bolo porovnanie čo najvýraznejšie, zapnite obmedzenie využitia siete.(optional) Turn on network throttling to exaggerate the effects of this comparison.

  5. Podržte stlačený kláves Alt, vyberte tlačidlo a potom sledujte sieťový prenos.While holding down the Alt key, select the button, and then watch the network traffic.

    V nástrojoch sa zobrazia štyri žiadosti, vykonané postupne, podobne ako v nasledujúcom príklade.The tools show four requests performed in series, similar to this example. Skutočné časy sa odstránili, pretože by sa výrazne odlišovali.Actual times have been removed as they will vary wildly. V grafe vidíte, že jednotlivé volania začali až po ukončení toho predchádzajúceho:The graph shows that each call starts after the last has finished:

    Časový graf štyroch sieťových žiadostí, ktoré začali až po ukončení tej predchádzajúcej, a ktoré pokrývajú celé časové obdobie

  6. Aplikáciu uložte, zavrite a opätovne otvorte.Save, close, and reopen the app.

    Služba PowerApps ukladá údaje do medzipamäte, takže opätovný výber tlačidla automaticky nevytvorí štyri nové žiadosti.PowerApps caches data, so selecting the button again won't necessarily cause four new requests. Vždy, keď budete chcieť otestovať výkon, zavrite a opätovne otvorte aplikáciu.Each time you want to test performance, close and reopen your app. Ak ste zapli obmedzenie využitia siete, možno ho budete chcieť až do ďalšieho testovania vypnúť.If you turned network throttling on, you may want to turn it off until you're ready for another test.

  7. Pridajte druhý ovládací prvok Button (Tlačidlo) a nastavte jeho vlastnosť OnSelect na tento vzorec:Add a second Button control, and set its OnSelect property to this formula:

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

    Všimnite si, že ste pridali rovnaké volaniaClearCollect ako k prvému tlačidlu, ale tentokrát sú vložené vo funkcii Concurrent a oddelené čiarkami.Note that you added the same ClearCollect calls to the first button, but they're wrapped in a Concurrent function and separated by commas this time.

  8. Vymažte sledovanie siete v prehliadači.Clear the network monitor in the browser.

  9. Ak ste používali obmedzenie využitia siete, opätovne ho zapnite.If you were using network throttling before, turn it on again.

  10. Podržte stlačený kláves Alt, vyberte druhé tlačidlo a potom sledujte sieťový prenos.While holding down the Alt key, select the second button, and then watch the network traffic.

    V nástrojoch sa zobrazia štyri žiadosti vykonané súbežne, podobne ako v nasledujúcom príklade.The tools show four requests performed concurrently, similar to this example. Skutočné časy sa opätovne odstránili, pretože by sa výrazne odlišovali.Again, actual times have been removed as they will vary wildly. Z grafu vidíte, že všetky volania začali približne v rovnakom čase a nečakali, kým sa predchádzajúce volania skončia:The graph shows that all the calls start at about the same time and do not wait for the previous to finish:

    Časový graf štyroch sieťových žiadostí, všetky štyri začínajú súbežne a trvajú asi polovicu časového obdobia

    Tieto grafy sú založené na rovnakej mierke.These graphs are based on the same scale. Pomocou funkcie Concurrent ste znížili celkový čas potrebný na dokončenie týchto operácii na polovicu.By using Concurrent, you halved the total amount of time these operations took to finish.

  11. Aplikáciu uložte, zavrite a opätovne otvorte.Save, close, and reopen the app.

SúbehRace condition

  1. Pridajte do aplikácie pripojenie k službe Microsoft Translator.Add a connection to the Microsoft Translator service to your app.

  2. Pridajte ovládací prvok Text input, a ak má iný názov, premenujte ho na TextInput1.Add a Text input control, and rename it TextInput1 if it has a different name.

  3. Pridajte ovládací prvok Button (Tlačidlo)a nastavte jeho vlastnosť OnSelect na tento vzorec:Add a Button control, and set its OnSelect property to this formula:

    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
        }
    )
    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. Pridajte ovládací prvok Data tablea nastavte jeho vlastnosť Items na hodnotu Results.Add a Data table control, and set its Items property to Results.

  5. Na karte Vlastnosti na pravej table vyberte hodnotu Results a otvorte tablu Údaje.On the Properties tab of the right pane, select Results to open the Data pane.

  6. V zozname polí začiarknite políčko pre všetky polia – zobrazia sa v tabuľke údajov.In the list of fields, select the check box for each field to show them all in the data table.

  7. (voliteľné) Presuňte pole Input do hornej časti zoznamu a pole FrenchFaster presuňte do dolnej časti zoznamu.(optional) Drag the Input field to the top of the list, and drag the FrenchFaster field to the bottom of the list.

    Zoznam polí v kolekcii Result (Výsledky)

  8. Do ovládacieho prvku Text input zadajte alebo prilepte slovné spojenie, ktoré sa má preložiť.In the Text input control, type or paste a phrase to translate.

  9. Podržte stlačený kláves Alt a vyplňte tabuľku niekoľkonásobným výberom tlačidla.While holding down the Alt key, select the button multiple times to fill the table.

    Časy sa zobrazujú v milisekundách.The times are shown in milliseconds.

    Zobrazenie tabuľky údajov obsahujúcej výsledok prekladu reťazca „Hello World“ do francúzštiny a nemčiny.

    V niektorých prípadoch je francúzsky preklad rýchlejší ako nemecký a inokedy je to opačne.In some cases, the French translation is faster than the German translation, and vice versa. Oba sa začnú v rovnakom čase, ale jeden vráti výsledok skôr. Môže to mať rôzne dôvody, ako napríklad časové oneskorenie siete alebo spracovanie na strane servera.Both start at the same time, but one returns before the other for a variety of reasons, including network latency and server-side processing.

    Súbeh sa môže vyskytnúť vtedy, ak aplikácia závisí od toho, aby jeden preklad skončil skôr.A race condition would occur if the app depended on one translation ending first. Služba PowerApps však našťastie označí príznakom väčšinu závislostí časovania, ktoré je možné zistiť.Fortunately, PowerApps flags most timing dependencies that it can detect.