Share via


Sočasna funkcija

Velja za: Aplikacije Canvas Aplikacije, ki temeljijo na modelu

Ovrednoti več formul sočasno eno z drugo.

Description

Funkcija Concurrent omogoča hkratno ovrednotenje več formul, določenih znotraj iste lastnosti, če imajo priključek ali klice Dataverse. Običajno je več formul ovrednotenih z veriženjem z operaterjem ; (podpičje), ob čemer se vsaka ovrednoti zaporedno. S funkcijo Concurrent bo aplikacija hkrati ovrednotila vse formule znotraj lastnosti tudi po uporabi operatorja »;«. Ta hkratnost bo uporabnikom pomagala čakati manj časa na enak rezultat.

V lastnosti OnStart aplikacije uporabite funkcijo Concurrent za izboljšanje učinkovitosti delovanja, ko aplikacija naloži podatke. Ko se priklici podatkov ne začnejo, dokler se prejšnji klici ne končajo, mora aplikacija počakati na vsoto vseh časov zahtev. Če se priklici podatkov začnejo ob istem času, mora aplikacija počakati samo za čas najdaljše zahteve. Spletni brskalniki pogosto izboljšajo učinkovitost delovanja s hkratno izvedbo omrežnih klicev.

Ne morete napovedati zaporedja, v katerem formule v funkciji Concurrent začnejo in končajo vrednotenje. Formule v funkciji Concurrent ne bi smele vsebovati odvisnosti na druge formule v isti funkciji Concurrent in Power Apps prikaže napako, če to poskusite. Iz notranjosti lahko varno vzamete odvisnosti za formule zunaj funkcije Concurrent, ker se bodo dokončale, preden se bo funkcija Concurrent začela. Formule po funkciji Concurrent lahko varno vzamejo odvisnosti za formule od znotraj: izvedle se bodo, preden se funkcija Concurrent dokonča in premakne na naslednjo formulo v verigi (če uporabite operator ;). Pazite na majhne odvisnosti zaporedja, če prikličete funkcije ali načine storitve, ki imajo neželene učinke.

Formule lahko povežete v verigo z operatorjem ; v argumentu na Concurrent. Na primer, Concurrent( Set( a, 1 ); Set( b, a+1 ), Set( x, 2 ); Set( y, x+2 ) ) ovrednoti Set( a, 1 ); Set( b, a+1 ) sočasno s Set( x, 2 ); Set( y, x+2 ). V tem primeru so odvisnosti v formulah ustrezne: a bo nastavljeno pred b in x bo nastavljeno pred y.

Odvisno od naprave ali brskalnika, v katerih se aplikacija izvaja, je samo peščica formula lahko dejansko ovrednotena sočasno. Concurrent uporablja razpoložljive zmogljivosti in se ne dokonča, dokler se ne ovrednotijo vse formule.

Če omogočite Upravljanje napak na ravni formule (v naprednih nastavitvah), je prva napaka, do katere pride v zaporedju argumentov, vrnjena iz Concurrent; sicer je vrnjeno prazno. Če so vse formule uspešne, je vrnjeno true. Če ena formula ne uspe, se preostanek te formule ustavi, ostale formule pa nadaljujejo z vrednotenjem.

Funkcijo Concurrent lahko uporabljate samo v formulah vedenja.

Sintaksa

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

  • Formula(s) – obvezno. Formule za sočasno vrednotenje. Navesti morate vsaj dve formuli.

Primeri

Hitrejše nalaganje podatkov

  1. Ustvarite aplikacijo in dodajte štiri vire podatkov iz storitve Microsoft Dataverse, SQL Server ali SharePoint.

    Ta primer uporablja štiri tabele iz vzorčne zbirke podatkov Adventure Works v storitvi SQL Azure. Ko ustvarite zbirko podatkov, jo povežite iz storitve Power Apps z uporabo popolnoma določenega imena strežnika (na primer, srvname.database.windows.net):

    Vzpostavitev povezave z zbirko podatkov Adventure Works v storitvi Azure.

  2. Dodajte kontrolnik Button in nastavite njegovo lastnost OnSelect na to formulo:

    ClearCollect( Product, '[SalesLT].[Product]' );
    ClearCollect( Customer, '[SalesLT].[Customer]' );
    ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' );
    ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' )
    
  3. V brskalniku Microsoft Edge ali Google Chrome vklopite orodja za razvijalce, da spremljate omrežni promet, medtem ko se aplikacija izvaja.

  4. (Izbirno) Vklopite omejevanje zmogljivosti omrežja, da pretirate učinke te primerjave.

  5. Medtem ko držite tipko Alt, izberite gumb in si nato oglejte omrežni promet.

    Orodja prikazujejo štiri zahteve, izvedene v seriji, podobno kot v tem primeru. Dejanski časi so bili odstranjeni, saj se bodo zelo razlikovali. The graph shows that each call starts after the last has finished:

    Časovni graf štirih omrežnih zahtev, vsaka se začne, ko se zadnja konča, in zajemajo celotno časovno obdobje.

  6. Shranite, zaprite in znova odprite aplikacijo.

    Power Apps shrani podatke v predpomnilnik, zato se s ponovno izbiro gumba ne bodo nujno sprožile štiri nove zahteve. Vsakič, ko želite preskusiti učinkovitost delovanja, zaprite in znova odprite aplikacijo. Če ste vklopili omejevanje zmogljivosti omrežja, bi ga morda raje izklopili, dokler ne boste pripravljeni na drug preskus.

  7. Dodajte drug kontrolnik Button in nastavite njegovo lastnost OnSelect na to formulo:

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

    Upoštevajte, da ste dodali iste priklice ClearCollect na prvi gumb, vendar so tokrat oviti v funkcijo Concurrent in ločeni z vejicami.

  8. Počistite nadzor omrežja v brskalniku.

  9. Če ste prej uporabljali omejevanje omrežja, ga znova vklopite.

  10. Medtem ko držite tipko Alt, izberite drug gumb in si nato oglejte omrežni promet.

    Orodja prikazujejo štiri zahteve, izvedene sočasno, podobno kot v tem primeru. Kot prej, so bili dejanski časi odstranjeni, saj se bodo zelo razlikovali. Iz grafa je razvidno, da se vsi priklici začnejo približno ob istem času in ne čakajo, da se prejšnji konča:

    Časovni graf štirih omrežnih zahtev, vse štiri se začnejo skupaj, zajemajo približno polovico časovnega obdobja.

    Ti grafi temeljijo na isti lestvici. Z uporabo funkcije Concurrent ste prepolovili skupni čas do dokončanja teh postopkov.

  11. Shranite, zaprite in znova odprite aplikacijo.

Stanje tekme

  1. Dodajte povezavo do storitve Microsoft Translator v vašo aplikacijo.

  2. Dodajte kontrolnik Text input in ga preimenujte v TextInput1, če ima drugo ime.

  3. Dodajte kontrolnik Button in nastavite njegovo lastnost OnSelect na to formulo:

    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. Dodajte kontrolnik Data table in nastavite lastnost Items na Rezultati.

  5. Na zavihku Lastnosti desnega podokna izberite Urejanje polj, da odprete podokno Polja.

  6. V seznamu polj izberite potrditveno polje za vsako polje, da vsa prikažete v podatkovni tabeli.

  7. (Izbirno) Povlecite polje Vnos na vrh seznama in povlecite polje FrenchFaster na dno seznama.

    Seznam polj v zbirki rezultatov.

  8. V kontrolnik Text input vnesite ali prilepite besedno zvezo za prevod.

  9. Medtem ko držite tipko Alt, večkrat izberite gumb, da izpolnite tabelo.

    Časi so prikazani v milisekundah.

    Prikaz podatkovne tabele z rezultati prevajanja niza

    V nekaterih primerih je francoski prevod hitrejši od nemškega prevoda in obratno. Oba se začneta istočasno, toda en se vrne pred drugim iz številnih razlogov, vključno z zakasnitvijo omrežja in strežniško obdelavo.

    Do stanja tekme bi prišlo, če bi se aplikacija zanašala na to, da bo en prevod prej končan. Na srečo Power Apps označi večino časovnih odvisnosti, ki jih lahko zazna.