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
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:
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]' )
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.
(választható) Az összehasonlítás látványosabbá tehető a hálózatszabályozás bekapcsolásával.
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:
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.
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.
Ürítse ki a böngésző hálózatfigyelőjét.
Ha az előző teszthez használt hálózatszabályozást, akkor kapcsolja be újra.
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:
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.
Mentse, zárja be és nyissa meg újra az alkalmazást.
Versenyhelyzet
Adjon hozzá az alkalmazáshoz egy kapcsolatot a Microsoft Translator szolgáltatáshoz.
Adjon hozzá egy Szövegbevitel vezérlőelemet, és a nevét (ha eltér) módosítsa a TextInput1 értékre.
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 } )
Adjon hozzá egy Adattábla vezérlőelemet, és állítsa az Elemek tulajdonságot Eredmények értékre.
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.
A mezők listájában jelölje be a mezők jelölőnégyzeteit, hogy mindegyik megjelenjen az adattáblában.
(választható) Húzza az Input mezőt a lista tetejére, a FrenchFaster mezőt pedig a lista aljára.
A Szövegbevitel vezérlőelembe gépeljen vagy illesszen be egy lefordítandó kifejezést.
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.
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.