Megosztás:


Concurrent függvény

A következőkre vonatkozik: Vászonalapú alkalmazások Modellalapú 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ő- 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 függvény használatával az Concurrent alkalmazás az ; operátor használata után is egyidejűleg kiértékeli a tulajdonság összes képletét. Ezzel az egyidejűséggel a felhasználók kevesebbet várnak ugyanarra az eredményre.

Az alkalmazás OnStart tulajdonságában javíthatja Concurrent a teljesítményt, amikor az alkalmazás betölti az adatokat. 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.

A függvényben lévő képletek Concurrent kezdő és befejező kiértékelési sorrendjét nem lehet előrejelezni. A függvényen belüli Concurrent képletek nem tartalmazhatnak függőségeket az ugyanazon Concurrent a függvényen belüli más képleteken, és a Power Apps hibajelzést jelenít meg, ha megpróbálja. Belülről biztonságosan felvehet függőségeket a Concurrent függvényen kívüli képletektől, mert azok a Concurrent függvény elindítása előtt befejeződnek. A függvény utáni képletek biztonságosan átvehetik a Concurrent képletek függőségeit a függvényen belül: mind befejeződnek, mielőtt a Concurrent függvény befejeződik, és továbblépnek a lánc 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 képleteket a ; operátorral együtt az argumentumon belül a következőhöz Concurrentfűzheti: Például:Concurrent ( Set( a; 1 ); Set( b, a+1 ), Set( x, 2 ); Set( y, x+2 ) ) kiértékeli a Set( a, 1 ); Set( b, a+1 ) egyidejűleg a Set( x, 2 ); Set( y, x+2 ). 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. Concurrent használja a rendelkezésre álló képességeket, és nem fejeződik be, amíg az összes képlet ki nem lett értékelve.

Ha engedélyezi a képletszintű hibakezelést (speciális beállításokban), a rendszer az argumentumsorrendben észlelt első hibát adja vissza Concurrent; ellenkező esetben üres értéket ad vissza. 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.

Csak viselkedésképletekben használhatóConcurrent.

Szintaxis

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

  • Képletek – 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őpontok el lettek távolítva, mivel ezek nagyon eltérőek. 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]' )
    )
    

    Vegye figyelembe, hogy ugyanazokat a ClearCollect-hívásokat adta hozzá az első gombhoz, de ezek egy Concurrent függvénybe vannak csomagolva, és ezúttal vesszővel vannak 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őpontok ismét el lettek távolítva, mivel azok nagyon eltérőek. A grafikonon látható, hogy az összes hívás körülbelül ugyanabban az időpontban indul, és nem várja meg, amíg az előző befejeződik:

    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 használatával Concurrentfelé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 a másik előtt tér vissza különböző okokból, beleértve a hálózati késést és a kiszolgálóoldali feldolgozást.

    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.