Funció concurrent
S'aplica a: Aplicacions de llenç Aplicacions basades en models
Avalua diverses fórmules concurrentment entre si.
Descripció
La funció Concurrent permet avaluar diverses fórmules especificades dins de la mateixa propietat al mateix temps si tenen connector o trucades del Dataverse. Normalment, les fórmules múltiples s'avaluen encadenat-les juntament amb l'operador ; (punt i coma), que avalua cada fórmula de manera seqüencial. Amb la funció Concurrent, l'aplicació avaluarà totes les fórmules d'una propietat simultàniament fins i tot després d'utilitzar l'operador ;. Aquesta simultaneïtat ajudarà els usuaris a esperar menys pel mateix resultat.
A la propietat OnStart de l'aplicació, utilitzeu Concurrent per millorar el rendiment quan es carreguen les dades de l'aplicació. Quan les trucades de dades no s'inicien fins que finalitzen les trucades anteriors, l'aplicació ha d'esperar la suma de tots els temps de sol·licitud. Si les trucades de dades s'inicien al mateix temps, l'aplicació necessita esperar només el temps de sol·licitud més llarg. Els navegadors web milloren sovint el rendiment realitzant trucades a la xarxa simultàniament.
No podeu predir l'ordre en què les fórmules dins de la funció Concurrent comencen i acaben l'avaluació. Les fórmules de la funció Concurrent no haurien de contenir dependències en altres fórmules dins de la mateixa funció Concurrent i el Power Apps mostra un error si ho intenteu. Des de dins, podeu agafar de manera segura dependències en fórmules fora de la funció Concurrent perquè s'hauran de completar abans que comenci la funció Concurrent. Les fórmules després de la funció Concurrent poden agafar de manera segura dependències de les fórmules de dins: totes es completen abans que la funció Concurrent acabi i es desplaci a la fórmula següent en una cadena (si utilitzeu l'operador ;). Vigileu amb les dependències d'ordre subtils si esteu trucant funcions o mètodes de servei que tenen efectes secundaris.
Podeu encadenar fórmules juntament amb l'operador ; dins d'un argument a Concurrent. Per exemple, Concurrent( Set( a, 1 ); Set( b, a+1 ), Set( x, 2 ); Set( y, x+2 ) ) avalua Set( a, 1 ); Set( b, a+1 ) concurrentment amb Set( x, 2 ); Set( y, x+2 ). En aquest cas, les dependències de les fórmules estan bé: a es definirà abans que b i x es definirà abans que y.
Segons el dispositiu o el navegador en el qual s'estigui executant l'aplicació, només es podrien avaluar un grapat de fórmules de forma concurrent. La simultània utilitza les capacitats disponibles i no finalitzarà fins que no s'hagin avaluat totes les fórmules.
Si habiliteu la Gestió d'errors de nivell de fórmula (en la configuració avançada), el primer error trobat a l'ordre d'argument es torna de Concurrent ; en cas contrari, es torna en blanc. Si totes les fórmules són correctes, es retorna cert. Si falla una fórmula, la resta d'aquesta fórmula es deté, però les altres fórmules es continuen avaluant.
Només podeu utilitzar Concurrent en fórmules de comportament.
Sintaxi
Concurrent( Formula1,Formula2 [, ...] )
- Fórmules : obligatòries. Fórmules per avaluar concurrentment. Heu de proporcionar almenys dues fórmules.
Exemples
Carregar dades més ràpidament
Creeu una aplicació i afegiu quatre fonts de dades del Microsoft Dataverse, l'SQL Server o el SharePoint.
Aquest exemple utilitza quatre taules de la base de dades d'obres d'aventures d'exemple a l'SQL Azure. Després de crear la base de dades, connecteu-vos-hi des del Power Apps utilitzant el nom del servidor complet (per exemple, srvname.database.windows.net):
Afegiu un control Button i definiu-ne la propietat OnSelect a aquesta fórmula:
ClearCollect( Product, '[SalesLT].[Product]' ); ClearCollect( Customer, '[SalesLT].[Customer]' ); ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' ); ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' )
Al Microsoft Edge o al Google Chrome, activeu les eines per a desenvolupadors per supervisar el trànsit de xarxa mentre s'executa l'aplicació.
(opcional) Activeu la limitació de la xarxa per exagerar els efectes d'aquesta comparació.
Mentre manteniu premuda la tecla Alt, seleccioneu el botó i, a continuació, mireu el tràfic de xarxa.
Les eines mostren quatre sol·licituds realitzades en sèries, similars a aquest exemple. Els temps reals s'han eliminat perquè variaran molt. El gràfic mostra que cada trucada s'inicia després d'haver finalitzat l'última:
Deseu, tanqueu i torneu a obrir l'aplicació.
El Power Apps emmagatzema les dades en memòria cau, de manera que seleccionar de nou el botó no causarà necessàriament quatre sol·licituds noves. Cada vegada que vulgueu provar el rendiment, tanqueu i torneu a obrir l'aplicació. Si heu activat la limitació de la xarxa, pot ser que la voleu desactivar fins que estigueu a punt per a una altra prova.
Afegiu un segon control Botó i definiu-ne la propietat OnSelect a aquesta fórmula:
Concurrent( ClearCollect( Product, '[SalesLT].[Product]' ), ClearCollect( Customer, '[SalesLT].[Customer]' ), ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' ), ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' ) )
Heu de tenir en compte que heu afegit les mateixes trucades ClearCollect al primer botó, però inserides en una funció Concurrent i separades per comes aquesta vegada.
Esborreu el monitor de xarxa al navegador.
Si utilitzàveu la limitació de la xarxa abans, torneu-la a activar.
Mentre manteniu premuda la tecla Alt, seleccioneu el segon botó i, a continuació, mireu el tràfic de xarxa.
Les eines mostren quatre sol·licituds realitzades alhora, similars a aquest exemple. De nou, els temps reals s'han eliminat perquè variaran molt. El gràfic mostra que totes les trucades comencen al voltant del mateix moment i no esperen que l'anterior acabi:
Aquests gràfics es basen en la mateixa escala. En utilitzar Concurrent, heu reduït a la meitat la quantitat total de temps que han trigat aquestes operacions en acabar.
Deseu, tanqueu i torneu a obrir l'aplicació.
Condició de cursa
Afegeix una connexió al servei Translator Microsoft a l'aplicació .
Afegiu un control Entrada de temps i canvieu-ne el nom per TextInput1 si té un nom diferent.
Afegiu un control Botó i definiu-ne la propietat OnSelect a aquesta fórmula:
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 } )
Afegiu un control Taula de dades i definiu la propietat Items a Resultats.
A la pestanya Propietats de la subfinestra dreta, seleccioneu Edita els camps per obrir la subfinestra Camps.
A la llista de camps, activeu la casella de selecció per a cada camp per mostrar-los tots a la taula de dades.
(opcional) Arrossegueu el camp Entrada a la part superior de la llista i arrossegueu el camp FrenchFaster al final de la llista.
Al control Entrada de text, escriviu o enganxeu una frase per traduir.
Mentre manteniu premuda la tecla Alt, seleccioneu diverses vegades el botó per omplir la taula.
Els temps es mostren en mil·lisegons.
En alguns casos, la traducció al francès és més ràpida que la traducció alemanya, i viceversa. Totes dues comencen a la vegada, però una torna abans que l'altra per diversos motius, incloent-hi la latència de la xarxa i el processament del servidor.
Una condició de cursa es produiria si l'aplicació depengués de la finalització d'una traducció en primer lloc. Afortunadament, el Power Apps indica la majoria de dependències de temps que pot detectar.