Funkcija vienu metu
Taikoma: drobės programoms Modeliu pagrįstoms programoms
Tuo pačiu metu vieną su kita lygina kelias formules.
Aprašą
Naudojant funkciją Concurrent galima tuo pačiu metu įvertinti kelias toje pačioje ypatybėje nurodytas formules, jei jos turi jungtį arba „Dataverse“ iškvietimų. Įprastai kelios formulės yra įvertinamos jas sujungiant į grandinę ; (kabliataškio) operatoriumi, kuris nuosekliai įvertina kiekvieną formulę. Kai naudojama funkcija „Concurrent“, programa įvertins visas ypatybėje esančias formules tuo pačiu metu, net pradėjus naudoti ; operatorių. Dėl šio vienalaikiškumo vartotojams teks mažiau laukti to paties rezultato.
Programos ypatybėje OnStart naudodami Concurrent, galite padidinti našumą programai įkeliant duomenis. Kai duomenų iškvietos nepradedamos tol, kol nebaigiamos ankstesnės iškvietos, programa turi laukti visų užklausų trukmių sumos. Jei duomenų iškvietos pradedamos tuo pačiu metu, programai reikia laukti tik ilgiausios užklausos trukmės. Žiniatinklio naršyklės efektyvumą dažnai padidina tinklo iškvietas atlikdamos tuo pačiu metu.
Negalima numatyti, kokia tvarka funkcijos Concurrent formulės pradeda ir baigia vertinimo procesą. Funkcijos Concurrent formulėse neturi būti priklausomybių nuo kitų tos pačios funkcijos Concurrent formulių ir, jei bandote tokį variantą, „Power Apps“ rodo klaidą. Dirbdami su vidaus formulėmis, galite saugiai naudoti priklausomybes nuo funkcijai Concurrent nepriklausančių formulių, nes jos bus baigtos prieš pradedant funkciją Concurrent. Formulėse, vykdomose po funkcijos Concurrent, galima saugiai naudoti priklausomybes nuo vidaus formulių: visos jos bus baigtos iki tol, kai bus baigta funkcija Concurrent ir bus pereita prie kitos formulės grandinėje (jei naudojate operatorių ;). Jei iškviečiate funkcijas ar tarnybų metodus, turinčius šalutinį poveikį, atidžiai stebėkite subtilias tvarkos priklausomybes.
Operatoriumi ; Concurrent argumente galite susieti kelias formules. Pavyzdžiui, Concurrent( Set( a, 1 ); Set( b, a+1 ), Set( x, 2 ); Set( y, x+2 ) ) tuo pačiu metu įvertina Set( a, 1 ); Set( b, a+1 ) ir Set( x, 2 ); Set( y, x+2 ). Šiuo atveju formulių priklausomybės yra tinkamos: a bus nustatyta prieš b, o x bus nustatyta prieš y.
Tuo pačiu metu faktiškai galima įvertinti tik keletą formulių – tai priklauso nuo įrenginio arba naršyklės, kur veikia programa. Vienu metu naudoja galimas galimybes ir nebus baigtas, kol nebus įvertintos visos formulės.
Jei įjungiate Formulių lygio klaidų valdymas (išplėstinių parametrų dalyje), iš Concurrent pateikiama pirmoji įvykusi argumentų tvarkos klaida; kitu atveju pateikiama blank. Jei visos formulės yra sėkmingos, pateikiama true. Jei viena formulė nesėkminga, likusi tos formulės dalis sustabdoma, tačiau kitos formulės tęsia vertinimo procesą.
Concurrent galite naudoti tik veikimo formulėse.
Sintaksė
Concurrent( Formulė1,Formulė2 [, ...] )
- Formulės – būtina. Formulės, kurias reikia įvertinti tuo pačiu metu. Turite nurodyti bent dvi formules.
Pavyzdžiai
Greitesnis duomenų įkėlimas
Sukurkite programą ir įtraukite keturis duomenų šaltinius iš „Microsoft Dataverse“, „SQL Server“ arba „SharePoint“.
Šiame pavyzdyje naudojamos keturios lentelės iš pavyzdinės „SQL Azure“ „Adventure Works“ duomenų bazės. Sukūrę duomenų bazę, prie jos prisijunkite iš „Power Apps“ naudodami visiškai apibrėžtą serverio pavadinimą (pavyzdžiui, srvname.database.windows.net):
Įtraukite Button valdiklį ir nustatykite jo OnSelect ypatybę pagal šią formulę:
ClearCollect( Product, '[SalesLT].[Product]' ); ClearCollect( Customer, '[SalesLT].[Customer]' ); ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' ); ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' )
Naršyklėje „Microsoft Edge“ arba „Google Chrome“ įjunkite kūrėjo įrankius, kad, veikiant programai, būtų stebimas tinklo srautas.
(Nebūtina) Norėdami padidinti šio palyginimo poveikį, įjunkite tinklo ribojimo funkciją.
Laikydami nuspaudę klavišą „Alt“, pasirinkite mygtuką ir stebėkite tinklo srautą.
Įrankiai rodo keturias iš eilės atliktas užklausas, panašiai, kaip šiame pavyzdyje. Faktiniai laikai pašalinti, nes jie labai skirsis. Grafike rodoma, kad kiekviena iškvieta pradedama baigus paskutiniąją:
Įrašykite, uždarykite ir iš naujo atidarykite programą.
„Power Apps“ duomenis kaupia talpykloje, todėl, mygtuką pasirinkus dar kartą, nebūtinai atsiras keturios naujos užklausos. Kiekvieną kartą, kai norite išbandyti našumą, uždarykite ir iš naujo atidarykite programą. Jei įjungėte tinklo ribojimo funkciją, rekomenduojame ją išjungti iki tol, kol būsite pasirengę kitam bandymui.
Įtraukite antrą mygtuko valdiklį ir jo ypatybę OnSelect nustatykite kaip šią formulę:
Concurrent( ClearCollect( Product, '[SalesLT].[Product]' ), ClearCollect( Customer, '[SalesLT].[Customer]' ), ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' ), ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' ) )
Atkreipkite dėmesį, kad į pirmąjį mygtuką įtraukėte tas pačias ClearCollect iškvietas, tačiau jas šįkąrt gaubia funkcija Concurrent ir skiria kableliai.
Naršyklėje išvalykite tinklo monitorių.
Jei prieš tai naudojote tinklo ribojimo funkciją, ją vėl įjunkite.
Laikydami nuspaudę klavišą „Alt“, pasirinkite antrąjį mygtuką ir stebėkite tinklo srautą.
Įrankiai rodo keturias tuo pačiu metu atliekamas užklausas, panašiai, kaip šiame pavyzdyje. Faktiniai laikai vėl pašalinti, nes jie labai skirsis. Grafike rodoma, kad visos iškvietos prasideda maždaug tuo pačiu metu ir nelaukia, kol baigsis ankstesnioji:
Šiuose grafikuose naudojamas tas pats mastelis. Naudodami Concurrent, perpus sumažinote laiką, kurį trunka šios operacijos.
Įrašykite, uždarykite ir iš naujo atidarykite programą.
Konkuravimo sąlyga
Įtraukite ryšį su Microsoft vertėjo paslauga į savo programą.
Įtraukite teksto įvesties valdiklį ir jį pervardykite į TextInput1, jei jis pavadintas kitaip.
Įtraukite mygtuko valdiklį ir jo ypatybę OnSelect nustatykite kaip šią formulę:
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 } )
Įtraukite valdiklį Data table ir jo ypatybę Items nustatykite kaip Results.
Dešiniosios srities skirtuke Ypatybės pasirinkite Redaguoti laukus, kad atidarytumėte sritį Laukai.
Laukų sąraše pažymėkite kiekvieno lauko žymės langelį, kad jie visi būtų rodomi duomenų lentelėje.
(Nebūtina) Lauką Input nuvilkite į sąrašo viršų, o lauką FrenchFaster – į sąrašo apačią.
Teksto įvesties valdiklyje įveskite arba įklijuokite verstiną frazę.
Laikydami nuspaudę klavišą „Alt“, kelis kartus pasirinkite mygtuką, kad užpildytumėte lentelę.
Laikai rodomi milisekundėmis.
Kai kuriais atvejais vertimas į prancūzų k. yra greitesnis nei į vokiečių k. ir atvirkščiai. Abu pradedami tuo pačiu metu, tačiau vienas iš jų pateikiamas prieš kitą dėl įvairių priežasčių, įskaitant tinklo gaištį ir apdorojimą serveryje.
Jei programai reikėtų, kad vienas vertimas būtų baigtas pirmiau, būtų įvykdyta konkuravimo sąlyga. Laimei, „Power Apps“ pažymi daugumą laiko priklausomybių, kurias gali aptikti.