Nota
L'accés a aquesta pàgina requereix autorització. Pots provar d'iniciar sessió o canviar de directori.
L'accés a aquesta pàgina requereix autorització. Pots provar de canviar directoris.
S'aplica a: Aplicacions
de llenç Aplicacions basades en models
Avalua diverses fórmules concurrentment entre si.
Descripció
La Concurrent funció permet avaluar diverses fórmules especificades dins de la mateixa propietat al mateix temps si tenen crides al connector o al 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 Concurrent funció, l'aplicació avaluarà totes les fórmules d'una propietat simultàniament, fins i tot després d'utilitzar l'operador ; . Aquesta simultaneïtat ajuda els usuaris a esperar menys per obtenir el mateix resultat.
A la propietat OnStart de l'aplicació, utilitzeu-la Concurrent per millorar el rendiment quan l'aplicació carrega dades. 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è comencen i finalitzen l'avaluació de les fórmules de la Concurrent funció. Les fórmules de la Concurrent funció no han de contenir dependències d'altres fórmules de la mateixa Concurrent funció i el Power Apps mostra un error si ho intenteu. Des de dins, podeu prendre dependències de fórmules fora de la Concurrent funció de manera segura perquè es completen abans que s'iniciï la Concurrent funció. Les fórmules després de la Concurrent funció poden prendre dependències de les fórmules que hi ha dins: totes es completaran abans que acabi la Concurrent funció i passi a la següent fórmula d'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 ); Conjunt( b, a+1 ), Conjunt( x, 2 ); Conjunt( y, x+2 ) ) avaluaConjunt( a, 1 ); Set( b, a+1 ) simultàniament amb Set( x, 2 ); Conjunt( 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. Concurrent utilitza les capacitats disponibles i no acabarà fins que s'hagin avaluat totes les fórmules.
Si habiliteu l'administració d'errors a nivell de fórmula (a la configuració avançada), el primer error trobat en l'ordre dels arguments es retorna des de Concurrent; en cas contrari, es retorna blank. 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 es pot utilitzar Concurrent en fórmules de comportament.
Sintaxi
Concurrent( Fórmula1, Fórmula2 [, ...] )
- 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, ja que varien 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]' ) )Tingueu en compte que heu afegit les mateixes crides de ClearCollect al primer botó, però aquesta vegada estan embolicades en una Concurrent funció i separades per comes.
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, ja que varien molt. El gràfic mostra que totes les trucades comencen aproximadament a la mateixa hora i no esperen que finalitzi l'anterior:
Aquests gràfics es basen en la mateixa escala. Utilitzant Concurrentel , heu reduït a la meitat el temps total que trigaven a acabar aquestes operacions.
Deseu, tanqueu i torneu a obrir l'aplicació.
Condició de cursa
Afegiu una connexió al servei del Microsoft Translator 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. Tots dos comencen al mateix temps, però un torna abans que l'altre per diversos motius, com ara 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.