Egyidejű függvény

A következőkre vonatkozik: Vászonalapú alkalmazások Modellvezérelt alkalmazások

Több képletet értékel ki egyidejűleg.

Description

A Concurrent függvény lehetővé teszi több, ugyanazon tulajdonságon belül megadott képlet egyidejű kiértékelését, ha összekötőkkel vagy Dataverse-hívásokkal rendelkeznek. Több képlet általában a ; (pontosvessző) operátorral elválasztott felsorolással értékelhető ki. A függvények kiértékelése a felsorolás sorrendjében történik. A Concurrent függvény használatával az alkalmazás a ; operátor használata után is egyidejűleg értékeli ki a tulajdonságon belüli összes képletet. Ez a párhuzamosság segít a felhasználóknak kevesebbet várni ugyanannak az eredménynek a megszerzésére.

A Concurrent függvényt az alkalmazás OnStart tulajdonságában használva javíthatja az alkalmazás adatbetöltési teljesítményét. Ha az adathívások csak a korábbi hívások befejeződése után kezdődnek el, akkor az alkalmazásnak a lekérési idők összegét kell kivárnia. Ha az adathívások egyszerre kezdődnek, akkor az alkalmazásnak csak a leghosszabb lekérési időt kell megvárnia. A webböngészők teljesítményét gyakran javítja a hálózati hívások párhuzamos végrehajtása.

Előre nem állapítható meg, hogy a Concurrent függvényen belül milyen sorrendben kezdődik el és fejeződik be a képletek kiértékelése. A Concurrent függvényen belüli képletek nem hivatkozhatnak az egyazon Concurrent függvényen belüli más képletekre. Ilyen próbálkozás esetén a Power Apps hibát jelez. Belülről biztonságosan áthelyezheti a képletek függőségeit a Concurrent függvények kívülre, mert azok elkészülnek a Concurrent függvény indulása előtt. A Concurrent függvény utáni képletek is biztonságosan hivatkozhatnak a függvényben lévőkre, azok kiértékelése ugyanis azelőtt történik, hogy a Concurrent függvény befejeződik és továbblép a felsorolás következő képletére (ha a ; operátort használja). Mellékhatásokkal járó függvények vagy szolgáltatásmetódusok hívásakor ügyeljen a sorrendre kényes függőségekre.

A Concurrent egy-egy argumentumán belül a ; operátorral fűzhet össze képleteket. A Concurrent( Set( a, 1 ); Set( b, a+1 ), Set( x, 2 ); Set( y, x+2 ) ) például egyidejűleg értékeli ki a Set( a, 1 ); Set( b, a+1 ) és a Set( x, 2 ); Set( y, x+2 ) képletet. Ebben a példában a képletek függőségei megfelelőek: az a értéket kap a b előtt, az x pedig az y előtt.

Attól függően, hogy az alkalmazás milyen eszközön vagy böngészőben fut, csak néhány képlet ténylegesen párhuzamos kiértékelésére lehet lehetőség. A Concurrent függvény a rendelkezésre álló funkciókat használja, és nem fejeződik be addig, amíg az összes képlet ki nincs értékelve.

Ha engedélyezi a Képletszintű hibakezelést (a speciális beállítások között), akkor a Concurrent az argumentumok sorrendjében először bekövetkező hibát jelzi. Egyébként a visszatérési érték üres. Ha minden képlet megfelelő, akkor a visszatérési érték true. Ha egy képlet hibás, akkor ennek a képletnek a kiértékelése megszakad, de a többié folytatódik.

A Concurrent függvény csak műveleti képletekben használható.

Szintaxis

Concurrent( Képlet1, Képlet2 [, ...] )

  • Képlet(ek) – Kötelező. Az egyidejűleg kiértékelendő képletek. Legalább két képletet meg kell adni.

Példák

Gyorsabb adatbetöltés

  1. Hozzon létre egy alkalmazást, és vegyen fel négy adatforrást a Microsoft Dataverse, az SQL Server vagy a SharePoint rendszerből.

    Ebben a példában az SQL Azure-on lévő Adventure Works mintaadatbázis négy tábláját használtuk. Az adatbázis létrehozása után csatlakozzon hozzá a Power Apps szolgáltatásból a teljes kiszolgálónév (például kiszolgnev.database.windows.net) megadásával:

    Csatlakozás az Adventure Works adatbázishoz az Azure-ban.

  2. Adjon hozzá egy Button vezérlőelemet, és az OnSelect tulajdonság értékeként adja meg a következő képletet:

    ClearCollect( Product, '[SalesLT].[Product]' );
    ClearCollect( Customer, '[SalesLT].[Customer]' );
    ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' );
    ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' )
    
  3. A Microsoft Edge vagy a Google Chrome böngészőben a fejlesztői eszközök bekapcsolásával figyelheti a hálózati forgalmat az alkalmazás futása közben.

  4. (választható) Az összehasonlítás látványosabbá tehető a hálózatszabályozás bekapcsolásával.

  5. Az Alt billentyűt lenyomva tartva válassza ki a gombot, és figyelje meg a hálózati forgalmat.

    Az eszközök, a példához hasonlóan, négy egymás után teljesített kérelmet mutatnak. A tényleges időtartamok jelentősen eltérnek, ezért nem szerepelnek a példában. A grafikonon látható, hogy mindegyik hívás az előző befejezése után kezdődött el:

    Négy hálózati kérelem időbeli grafikonja. Mindegyik az előző befejeződése után kezdődik, és kitölti a teljes időtartamot.

  6. Mentse, zárja be és nyissa meg újra az alkalmazást.

    A Power Apps gyorsítótárazza az adatokat, ezért a gomb ismételt kiválasztása nem feltétlenül vált ki újabb négy kérelmet. Ha a teljesítményt kívánja tesztelni, akkor minden alkalommal zárja be és nyissa meg újra az alkalmazást. Ha bekapcsolta a hálózatszabályozást, akkor ajánlott kikapcsolni, amíg készen nem áll a következő tesztre.

  7. Adjon hozzá egy második Gomb vezérlőelemet, és az OnSelect tulajdonság értékeként adja meg a következő képletet:

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

    Figyelje meg, hogy ugyanazokat a ClearCollect hívásokat adta hozzá, mint az első gombhoz, de ezúttal egy Concurrent függvénybe ágyazva és vesszőkkel elválasztva.

  8. Ürítse ki a böngésző hálózatfigyelőjét.

  9. Ha az előző teszthez használt hálózatszabályozást, akkor kapcsolja be újra.

  10. Az Alt billentyűt lenyomva tartva válassza ki a második gombot, és figyelje meg a hálózati forgalmat.

    Az eszközök, a példához hasonlóan, négy egyidejűleg teljesített kérelmet mutatnak. A tényleges időtartamok itt is jelentősen eltérnek, ezért nem szerepelnek a példában. A grafikonon az látható, hogy a hívások nagyjából egyszerre kezdődnek, és nem várnak az előzők befejezésére:

    Négy hálózati kérelem időbeli grafikonja. Mindegyik egyszerre kezdődik, és körülbelül az időtartam feléig terjednek.

    A grafikonok méretezése egyezik. A Concurrent függvény használatával felére csökkentette a műveletek befejezéséhez szükséges időt.

  11. Mentse, zárja be és nyissa meg újra az alkalmazást.

Versenyhelyzet

  1. Adjon hozzá az alkalmazáshoz egy kapcsolatot a Microsoft Translator szolgáltatáshoz.

  2. Adjon hozzá egy Szövegbevitel vezérlőelemet, és a nevét (ha eltér) módosítsa a TextInput1 értékre.

  3. Adjon hozzá egy Gomb vezérlőelemet, és az OnSelect tulajdonság értékeként adja meg a következő képletet:

    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. Adjon hozzá egy Adattábla vezérlőelemet, és állítsa az Elemek tulajdonságot Eredmények értékre.

  5. A jobb oldali panel Tulajdonságok lapján válassza a Mezők szerkesztése lehetőséget a Mezők panel megnyitásához.

  6. A mezők listájában jelölje be a mezők jelölőnégyzeteit, hogy mindegyik megjelenjen az adattáblában.

  7. (választható) Húzza az Input mezőt a lista tetejére, a FrenchFaster mezőt pedig a lista aljára.

    A mezők listája az Eredmények gyűjteményben.

  8. A Szövegbevitel vezérlőelembe gépeljen vagy illesszen be egy lefordítandó kifejezést.

  9. Az Alt billentyűt lenyomva tartva kattintson többször a gombra, hogy kitöltse a táblát.

    Az időértékek ezredmásodpercben jelennek meg.

    A

    Bizonyos esetekben a francia fordítás gyorsabb a németnél vagy fordítva. Mindkettő egyszerre kezdődik, de az egyik visszaadása valamilyen okból – például hálózati késés vagy a kiszolgálóoldali feldolgozás miatt – gyorsabb.

    Versenyhelyzet akkor állna elő, ha az alkalmazás függne attól, hogy melyik fordítás fejeződik be elsőként. Szerencsére a Power Apps a legtöbb észlelt időzítési függőséget megjelöli.