Súbežná funkcia
Vzťahuje sa na: aplikácie plátna
aplikácie s podporou modelov
Hodnotí viacero vzorcov súbežne.
Description
Funkcia Concurrent umožňuje súčasné vyhodnotenie viacerých vzorcov zadaných v rámci tej istej vlastnosti, ak majú volania Dataverse alebo konektor. Za normálnych okolností sa viaceré vzorce hodnotia reťazením pomocou operátora ; (dvojbodka), kde sa každý vzorec vyhodnocuje v príslušnom poradí. Pomocou funkcie Concurrent bude aplikácia vyhodnocovať všetky vzorce v rámci vlastnosti súčasne aj po použití operátora ;. Táto súbežnosť pomôže používateľom čakať menej na rovnaký výsledok.
Vo vlastnosti OnStart v aplikácii môžete použiť funkciu Concurrent na zlepšenie výkonu pri načítavaní údajov aplikáciou. 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í. Ak volania údajov začnú v tom istom čase, aplikácia musí iba počkať, kým uplynutie najdlhší čas požiadavky. Webové prehliadače často zlepšujú výkon súbežným vykonávaním sieťových volaní.
Poradie, v ktorom vzorce v rámci funkcie Concurrent začínajú a končia vyhodnotenie, nie je možné predvídať. 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 Power Apps sa zobrazí chyba. 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. 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 ;). 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í.
Vzorce môžete reťaziť pomocou operátora ; v rámci argumentu funkcie 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 ). 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.
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. Funkcia Concurrent používa dostupné možnosti a neskončí, kým nebudú všetky vzorce vyhodnotené.
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. Ak sú všetky vzorce správne, vráti sa hodnota pravda. Ak jeden vzorec nie je správny, zvyšok vzorca sa zastaví, ale ostatné vzorce sa budú aj naďalej vyhodnocovať.
Funkciu Concurrent môžete používať iba vo vzorcoch správania.
Syntax
Concurrent( Formula1, Formula2 [, ...] )
- + Formula1, Formula2, … – povinné. Vzorce, ktoré sa majú súbežne vyhodnotiť. Treba zadať aspoň dva vzorce.
Príklady
Rýchlejšie načítavanie údajov
Vytvorte aplikáciu a pridajte štyri zdroje údajov z Microsoft Dataverse, SQL Server alebo SharePoint.
V tomto príklade sa používajú štyri tabuľky zo vzorovej databázy Adventure Works v službe SQL Azure. Po vytvorení databázy sa k nej pripojte zo služby Power Apps pomocou úplného názvu servera (napríklad srvname.database.windows.net):
Pridajte ovládací prvok Button a nastavte jeho vlastnosť OnSelect na tento vzorec:
ClearCollect( Product, '[SalesLT].[Product]' ); ClearCollect( Customer, '[SalesLT].[Customer]' ); ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' ); ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' )
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.
(voliteľné) Ak chcete, aby bolo porovnanie čo najvýraznejšie, zapnite obmedzenie využitia siete.
Podržte stlačený kláves Alt, vyberte tlačidlo a potom sledujte sieťový prenos.
V nástrojoch sa zobrazia štyri žiadosti, vykonané postupne, podobne ako v nasledujúcom príklade. Skutočné časy sa odstránili, pretože by sa výrazne odlišovali. V grafe vidíte, že jednotlivé volania začali až po ukončení toho predchádzajúceho:
Aplikáciu uložte, zavrite a opätovne otvorte.
Služba Power Apps ukladá údaje do medzipamäte, takže opätovný výber tlačidla automaticky nevytvorí štyri nové žiadosti. Vždy, keď budete chcieť otestovať výkon, zavrite a opätovne otvorte aplikáciu. Ak ste zapli obmedzenie využitia siete, možno ho budete chcieť až do ďalšieho testovania vypnúť.
Pridajte druhý ovládací prvok Tlačidlo a nastavte jeho vlastnosť OnSelect na tento vzorec:
Concurrent( ClearCollect( Product, '[SalesLT].[Product]' ), ClearCollect( Customer, '[SalesLT].[Customer]' ), ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' ), ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' ) )
Všimnite si, že ste pridali rovnaké volania ClearCollect ako k prvému tlačidlu, ale tentokrát sú vložené vo funkcii Concurrent a oddelené čiarkami.
Vymažte sledovanie siete v prehliadači.
Ak ste používali obmedzenie využitia siete, opätovne ho zapnite.
Podržte stlačený kláves Alt, vyberte druhé tlačidlo a potom sledujte sieťový prenos.
V nástrojoch sa zobrazia štyri žiadosti vykonané súbežne, podobne ako v nasledujúcom príklade. Skutočné časy sa opätovne odstránili, pretože by sa výrazne odlišovali. Graf ukazuje, že všetky volania začínajú približne v tom istom čase a nečakajú, kým sa predchádzajúce volania skončia:
Tieto grafy sú založené na rovnakej mierke. Pomocou funkcie Concurrent ste znížili celkový čas potrebný na dokončenie týchto operácii na polovicu.
Aplikáciu uložte, zavrite a opätovne otvorte.
Súbeh
Pridajte do aplikácie pripojenie k službe Microsoft Translator.
Pridajte ovládací prvok Text input, a ak má iný názov, premenujte ho na TextInput1.
Pridajte ovládací prvok Tlačidlo a nastavte jeho vlastnosť OnSelect na tento vzorec:
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 } )
Pridajte ovládací prvok Data table a nastavte jeho vlastnosť Items na hodnotu Results.
Na karte Vlastnosti na table vpravo vyberte položku Upraviť polia, čím otvoríte tablu Polia.
V zozname polí začiarknite políčko pre všetky polia – zobrazia sa v tabuľke údajov.
(voliteľné) Presuňte pole Input do hornej časti zoznamu a pole FrenchFaster presuňte do dolnej časti zoznamu.
Do ovládacieho prvku Text input zadajte alebo prilepte slovné spojenie, ktoré sa má preložiť.
Podržte stlačený kláves Alt a vyplňte tabuľku niekoľkonásobným výberom tlačidla.
Časy sa zobrazujú v milisekundách.
V niektorých prípadoch je francúzsky preklad rýchlejší ako nemecký a inokedy je to opačne. 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.
Súbeh sa môže vyskytnúť vtedy, ak aplikácia závisí od toho, aby jeden preklad skončil skôr. Služba Power Apps však našťastie označí príznakom väčšinu závislostí časovania, ktoré je možné zistiť.