Istodobna funkcija
Primjenjuje se na sljedeće: Aplikacije radnog područja Aplikacije stvorene prema modelu
Istodobno procjenjuje više formula.
Opis
Funkcija Concurrent dopušta da se više formula navedenih u istom svojstvu procjenjuje u isto vrijeme ako imaju konektor ili Dataverse pozive. U normalnim uvjetima, više se formula procjenjuje lančanim povezivanjem pomoću (točka sa zarezom) operatora ;, čime se svaka formula procjenjuje po redoslijedu. S funkcijom Concurrent, aplikacija će istodobno procijeniti sve formule unutar svojstva čak i nakon korištenja ; operatera. Ovaj istovremeni rad pomoći će korisnicima da kraće čekaju na isti rezultat.
U svojstvu OnStart vaše aplikacije, upotrijebite Concurrent da biste poboljšali performanse kada aplikacija učitava podatke. Kada podatkovni pozivi ne započnu dok se prethodni pozivi ne završe, aplikacija mora pričekati zbroj svih vremena zahtjeva. Ako se podatkovni pozivi pokrenu u isto vrijeme, aplikacija treba pričekati samo najduže vrijeme zahtjeva. Web-preglednici često poboljšavaju performanse izvršavajući mrežne pozive istodobno.
Ne možete predvidjeti redoslijed kojim formule unutar funkcije Concurrent počinju i završavaju procjenjivanje. Formule unutar funkcije Concurrent ne bi trebale sadržavati ovisnosti o drugim formulama unutar iste funkcije Concurrent, a aplikacija Power Apps pokazuje pogrešku ako pokušate. Iznutra možete sigurno preuzeti ovisnosti o formulama izvan funkcije Concurrent jer će se dovršiti prije nego se funkcija Concurrent pokrene. Formule iza funkcije Concurrent mogu sigurno preuzeti ovisnosti o formulama unutar nje: one će se sve dovršiti prije nego što se funkcija Concurrent dovrši i prijeđe na sljedeću formulu u lancu (ako upotrebljavate operator ;). Pazite na suptilne ovisnosti redoslijeda ako pozivate funkcije ili načine usluge koji imaju nuspojave.
Možete ulančati formule operatorom ; unutar nekog argumenta funkcije Concurrent. Na primjer, Concurrent( Set( a, 1 ); Set( b, a+1 ), Set( x, 2 ); Set( y, x+2 ) ) procjenjuje Set( a, 1 ); Set( b, a+1 ) istodobno sa Set( x, 2 ); Set( y, x+2 ). U tom slučaju su ovisnosti unutar formula dobre: a bit će postavljeno prije b, a x prije y.
Ovisno o uređaju ili pregledniku u kojem se aplikacija izvršava, samo nekoliko formula može se istodobno procjenjivati. Istodobno koristi dostupne mogućnosti i neće završiti dok se ne procijene sve formule.
Ako omogućite Upravljanje pogreškama na razini formule (u naprednim postavkama), vraća se prva pogreška u redoslijedu argumenata funkcije Concurrent; u suprotnom, vraća se vrijednost prazno. Ako su sve formule uspješne, vraća se vrijednost true. Ako jedna formula bude neuspješna, ostatak te formule staje, ali ostale formule se nastavljaju procjenjivati.
Funkciju Concurrent možete koristiti samo u formulama ponašanja.
Sintaksa
Istodobno( Formula1; Formula2 [, ...] )
- Formule – Obavezno. Formule koje se procjenjuju istodobno. Morate unijeti najmanje dvije formule.
Primjeri
Brže učitavanje podataka
Stvorite aplikaciju i dodajte četiri izvora podataka iz Microsoft Dataverse, SQL Server ili SharePoint.
Ovaj primjer koristi četiri tablice iz ogledne baze podataka Adventure Works u usluzi SQL Azure. Nakon što stvorite bazu podataka, povežite se s njom iz aplikacije Power Apps koristeći potpuno kvalificirano ime poslužitelja (na primjer, srvname.database.windows.net):
Dodajte kontrolu Button i postavite svojstvo OnSelect na sljedeću formulu:
ClearCollect( Product, '[SalesLT].[Product]' ); ClearCollect( Customer, '[SalesLT].[Customer]' ); ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' ); ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' )
U pregledniku Microsoft Edge ili Google Chrome uključite razvojne alate za nadzor mrežnog prometa dok se vaša aplikacija izvršava.
(neobvezno) Uključite ograničavanje protoka mreže kako biste pojačali učinke ove usporedbe.
Dok držite pritisnutu tipku Alt, odaberite gumb i zatim pogledajte mrežni promet.
Alati prikazuju četiri zahtjeva izvršena u nizu, slično ovom primjeru. Stvarna vremena uklonjena su jer će se jako razlikovati. Grafikon pokazuje da svaki poziv započinje nakon što zadnji završi:
Spremite, zatvorite i ponovno otvorite aplikaciju.
Power Apps predmemorira podatke, pa ponovni odabir gumba neće nužno prouzročiti četiri nova zahtjeva. Svaki put kada želite testirati performanse, zatvorite i ponovno otvorite aplikaciju. Ako ste uključili ograničavanje protoka mreže, možda ćete ga željeti isključiti dok ne budete spremni za novi test.
Dodajte drugu kontrolu Button i postavite njezino svojstvo OnSelect na sljedeću formulu:
Concurrent( ClearCollect( Product, '[SalesLT].[Product]' ), ClearCollect( Customer, '[SalesLT].[Customer]' ), ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' ), ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' ) )
Imajte na umu da ste dodali iste ClearCollect pozive na prvi gumb, ali oni su umotani u funkciju Concurrent i ovaj put razdvojeni zarezima.
Izbrišite mrežni nadzor u pregledniku.
Ako ste prije koristili ograničavanje protoka mreže, ponovo ga uključite.
Dok držite pritisnutu tipku Alt, odaberite drugi gumb i zatim pogledajte mrežni promet.
Alati prikazuju četiri zahtjeva izvršena u nizu istodobno, slično ovom primjeru. Još jednom, stvarna vremena uklonjena su jer će se jako razlikovati. Grafikon pokazuje da svi pozivi počinju otprilike u isto vrijeme i ne čekaju da se prethodni završi:
Ti se grafikoni temelje na istoj skali. Pomoću funkcije Concurrent prepolovili ste ukupno vrijeme potrebno za dovršetak ovih operacija.
Spremite, zatvorite i ponovno otvorite aplikaciju.
Stanje utrke
Dodajte vezu s uslugom Microsoft Prevoditelj u svoju aplikaciju.
Dodajte kontrolu Text input i preimenujte je u TextInput1 ako ima neki drugi naziv.
Dodajte kontrolu Button i postavite njezino svojstvo OnSelect na sljedeću formulu:
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 } )
Dodajte kontrolu Data table i postavite njezino svojstvo Items na Results.
Na kartici Svojstva desnog okna odaberite Uredi polja da biste otvorili okno Polja.
Na popisu polja odaberite potvrdni okvir za svako polje da biste ih sve prikazali u tablici podataka.
(neobvezno) Povucite polje Input na vrh popisa i povucite polje FrenchFaster na dno popisa.
U kontroli Text input utipkajte ili zalijepite frazu za prijevod.
Dok držite pritisnutu tipku Alt, nekoliko puta odaberite gumb da biste ispunili tablicu.
Vremena su prikazana u milisekundama.
U nekim je slučajevima prijevod na francuski brži od njemačkog, i obrnuto. Oba započinju u isto vrijeme, ali jedan se vraća prije drugog iz različitih razloga, kao što su kašnjenje mreže i obrada na strani poslužitelja.
Stanje utrke može se dogoditi ako aplikacija ovisi o jednom prijevodu koji se završava prvi. Srećom, aplikacija Power Apps označava većinu vremenskih ovisnosti koje može otkriti.