Funkce Concurrent

Platí pro: aplikace plátna modelem řízené aplikace

Vyhodnocuje vzorce souběžně s jedním dalším.

Popis

Funkce Concurrent umožňuje vyhodnocení více vzorců zadaných v rámci stejné vlastnosti současně, pokud volají konektor nebo Dataverse. Za normálních okolností probíhá vyhodnocování zřetězením vzorců pomocí operátoru ; (středník), který vyhodnocuje každý vzorec postupně. Pomocí funkce Concurrent bude aplikace vyhodnocovat všechny vzorce v rámci vlastnosti současně i po použití operátoru ; (středník). Tato souběžnost pomůže uživatelům čekat kratší dobu na stejný výsledek.

Ve vlastnosti OnStart vaší aplikace můžete funkci Concurrent použít k vylepšení výkonu při načítání dat. Když se volání dat zahájí až po dokončení předchozích volání, doba čekání aplikace odpovídá součtu všech dob žádostí. Pokud se volání dat spustí současně, musí aplikace čekat jen tak dlouho, jak trvá nejdelší doba žádosti. Prováděním souběžných siťových volání se často zlepšuje výkon u webových prohlížečů.

Pořadí, ve kterém vzorce ve funkci Concurrent zahajují a ukončují vyhodnocování, není možné předvídat. Vzorce ve funkci Concurrent by neměly obsahovat závislosti na dalších vzorcích v rámci stejné funkce Concurrent. Pokud se o to pokusíte, Power Apps zobrazí chybu. Uvnitř funkce Concurrent ale můžete bezpečně vytvářet závislosti na vzorcích mimo ni, protože funkce Concurrent se spustí až po jejich dokončení. Vzorce za funkcí Concurrent mohou bezpečně vytvářet závislosti na vzorcích v ní. Všechny se totiž dokončí před tím, než se funkce Concurrent dokončí a přejde na další vzorec v řetězci (použijete-li operátor ;). Pokud chcete volat funkce nebo metody služby s vedlejšími účinky, dávejte si pozor na drobné závislosti v pořadí.

Vzorce můžete v argumentu funkce Concurrent řetězit pomocí operátoru ;. Například Concurrent( Set( a, 1 ); Set( b, a+1 ), Set( x, 2 ); Set( y, x+2 ) ) vyhodnotí Set( a, 1 ); Set( b, a+1 ) souběžně se Set( x, 2 ); Set( y, x+2 ). V tomto případě jsou závislosti v rámci vzorců v pořádku: a se nastaví před b a x se nastaví před y.

V závislosti na zařízení nebo prohlížeči, ve kterém je aplikace spuštěná, se může současně vyhodnotit jen několik vzorců. Funkce Concurrent využívá dostupné možnosti a dokončí se až po vyhodnocení všech vzorců.

Pokud v pokročilých nastaveních povolíte správu chyb na úrovni vzorců, vrátí se první chyba zjištěná v pořadí argumentů z funkce Concurrent, jinak se vrátí prázdná hodnota. Když jsou všechny vzorce úspěšné, vrátí se hodnota true. V případě, že se jeden vzorec nezdaří, zbytek tohoto vzorce se zastaví – jiné vzorce se ale budou i nadále vyhodnocovat.

Funkci Concurrent můžete použít jen ve vzorcích chování.

Syntaxe

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

  • Vzorec – povinné. Vzorce, které se mají vyhodnotit současně. Zadejte alespoň dva vzorce.

Příklady

Rychlejší načítání dat

  1. Vytvořte aplikaci a přidejte čtyři zdroje dat z Microsoft Dataverse, SQL Server nebo SharePoint.

    V tomto příkladu se používají čtyři tabulky z ukázkové databáze Adventure Works v SQL Azure. Po vytvoření připojte databázi v Power Apps pomocí plně kvalifikovaného názvu serveru (například srvname.database.windows.net):

    Připojení k databázi společnosti Adventure Works v Azure.

  2. Přidejte ovládací prvek Button a nastavte jeho vlastnost OnSelect na tento vzorec.

    ClearCollect( Product, '[SalesLT].[Product]' );
    ClearCollect( Customer, '[SalesLT].[Customer]' );
    ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' );
    ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' )
    
  3. V prohlížeči Microsoft Edge nebo Google Chrome zapněte vývojářské nástroje, abyste mohli za běhu aplikace sledovat provoz v síti.

  4. (volitelné) Pokud chcete, aby bylo toto porovnání co nezřetelnější, zapněte omezení využití sítě.

  5. Podržte stisknutou klávesu Alt, vyberte tlačítko a sledujte provoz v síti.

    Nástroje zobrazí čtyři žádosti prováděné v řadě, podobně jako na tomto příkladu. Skutečné časy byly odebrány, protože se budou výrazně lišit. Na grafu vidíte, že každé volání se zahájí po dokončení předchozího:

    Časový graf čtyř síťových požadavků, ve němž se každý z nich zahájí po skončení předchozího a pokryje se tak celý časový úsek.

  6. Uložte, zavřete a znovu otevřete aplikaci.

    Power Apps ukládají data do mezipaměti, takže opětovný výběr tlačítka nemusí podnítit čtyři nové žádosti. Kdykoliv chcete testovat výkon, je potřeba aplikaci zavřít a znovu otevřít. Pokud jste zapnuli omezení využití sítě, možná ho budete chtít až do dalšího testování vypnout.

  7. Přidejte druhý ovládací prvek Button a do vlastnosti OnSelect nastavte tento vzorec:

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

    Všimněte si, že jste přidali stejná volání ClearCollect jako u prvního tlačítka, ale zde jsou zabalené do funkce Concurrent a oddělené čárkami.

  8. V prohlížeči vymažte sledování sítě.

  9. Pokud jste používali omezení využití sítě, znovu je zapněte.

  10. Podržte stisknutou klávesu Alt, vyberte druhé tlačítko a sledujte provoz v síti.

    Nástroje zobrazí čtyři žádosti prováděné souběžně, podobně jako na tomto příkladu. Skutečné časy byly i zde odebrány, protože se budou výrazně lišit. Na grafu vidíte, že všechna volání se zahájila přibližně ve stejný čas a nečekala na dokončení předchozího:

    Časový graf čtyř síťových požadavků, které se zahájily současně a pokrývají asi polovinu časového úseku.

    Tyto grafy jsou založené na stejném škálování. Použitím funkce Concurrent jste snížili celkový čas dokončení těchto operací na polovinu.

  11. Uložte, zavřete a znovu otevřete aplikaci.

Konflikt časování

  1. Přidejte do aplikace připojení ke službě Microsoft Translator.

  2. Přidejte ovládací prvek Text input a přejmenujte ho na TextInput1, pokud se jmenuje jinak.

  3. Přidejte ovládací prvek Button a nastavte jeho vlastnost 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
        }
    )
    
  4. Přidejte ovládací prvek Data table a do vlastnosti Items nastavte Results.

  5. Na kartě Vlastnosti v pravém podokně vyberte Upravit pole vedle popisku Pole a otevřete podokno Pole.

  6. V seznamu polí zaškrtněte všechna pole – zobrazí se tak v tabulce dat.

  7. (volitelné) Přetáhněte pole Input do horní části seznamu a pole FrenchFaster do dolní části seznamu.

    Seznam polí v kolekci Result.

  8. V ovládacím prvku Text input zadejte nebo vložte frázi k překladu.

  9. Podržte stisknutou klávesu Alt a vyplňte tabulku několika stisknutími tlačítka.

    Časy se zobrazují v milisekundách.

    Zobrazení datové tabulky obsahující výsledky překladu řetězce „Hello World“ do francouzštiny a němčiny. Někdy je francouzský překlad rychlejší než německý a někdy je to naopak.

    Překlad do francouzštiny je někdy rychlejší než do němčiny a obráceně. Oba se zahájí ve stejný čas, ale jeden z nich se vrátí před druhým z různých důvodů, například kvůli latenci sítě nebo zpracovávání na straně serveru.

    Pokud by aplikace závisela na dokončení některého z překladů, došlo by ke konfliktu časování. Power Apps naštěstí označí příznakem většinu závislostí v časování, které je možné detekovat.