Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a: Aplicaciones de lienzo basadas en modelos
Evalúa varias fórmulas simultáneamente entre sí.
Descripción
La Concurrent función permite evaluar varias fórmulas especificadas dentro de la misma propiedad al mismo tiempo si tienen llamadas de conector o Dataverse. Normalmente, para evaluar varias fórmulas se encadenan con el operador ; (punto y coma), que evalúa secuencialmente cada fórmula. Con la Concurrent función , la aplicación evaluará todas las fórmulas dentro de una propiedad simultáneamente incluso después de usar el operador ; . Esta simultaneidad ayuda a los usuarios a esperar menos para el mismo resultado.
En la propiedad OnStart de la aplicación, use Concurrent para mejorar el rendimiento cuando la aplicación cargue datos. Si las llamadas de datos no se inician hasta que terminan las llamadas anteriores, la aplicación debe esperar la suma de todos los tiempos de solicitud. Si las llamadas de datos se inician al mismo tiempo, la aplicación solo debe esperar el tiempo de solicitud más largo. Los exploradores web suelen mejorar el rendimiento al realizar las llamadas de red de forma simultánea.
No se puede predecir el orden en el que las fórmulas dentro de la función iniciar y finalizar la Concurrent evaluación. Las fórmulas dentro de la Concurrent función no deben contener dependencias en otras fórmulas dentro de la misma Concurrent función y Power Apps muestra un error si intenta. Desde dentro, puede tomar dependencias de forma segura en fórmulas fuera de la Concurrent función porque se completan antes de que se inicie la Concurrent función. Las fórmulas después de que la Concurrent función puedan tomar dependencias de forma segura en las fórmulas de: todas se completarán antes de que finalice la Concurrent función y se muevan a la siguiente fórmula de una cadena (si se usa el operador ; ). Esté atento a las dependencias de orden sutiles si está llamando a funciones o métodos de servicio con efectos secundarios.
Puede encadenar fórmulas junto con el operador ; dentro de un argumento a Concurrent. Por ejemplo, Concurrent( Set( a, 1 ); Set( b, a+1 ), Set( x, 2 ); Set( y, x+2 ) ) evalúa Set( a, 1 ); Set( b, a+1 ) simultáneamente con Set( x, 2 ); Set( y, x+2 ). En este caso, las dependencias dentro de las fórmulas están bien: a se establece antes de b y x se establece antes de y.
Según el dispositivo o explorador en el que se ejecute la aplicación, es posible que solo un puñado de fórmulas se evalúen realmente de forma simultánea. Concurrent usa las funcionalidades disponibles y no finalizará hasta que se hayan evaluado todas las fórmulas.
Si habilita la administración de errores de nivel de fórmula (en la configuración avanzada), se devuelve el primer error encontrado en el orden de argumentos; Concurrentde lo contrario, se devuelve el valor en blanco . Si todas las fórmulas son correctas, se devuelve true. Si se produce un error en una fórmula, se detiene el resto de la fórmula, pero las demás fórmulas se siguen evaluando.
Solo puede usar Concurrent en fórmulas de comportamiento.
Sintaxis
Concurrent( Formula1, Formula2 [, ...] )
- Fórmulas – Obligatorio. Fórmulas que se van a evaluar de forma simultánea. Se deben proporcionar al menos dos fórmulas.
Ejemplos
Carga de datos más rápida
Cree una aplicación y agregue cuatro orígenes de datos de Microsoft Dataverse, SQL Server o SharePoint.
En este ejemplo se usan cuatro tablas de la base de datos de ejemplo Adventure Works en SQL Azure. Después de crear la base de datos, conéctese a ella desde Power Apps con el nombre de servidor completo (por ejemplo, srvname.database.windows.net):
Agregue un control Button y establezca su propiedad OnSelect en esta fórmula:
ClearCollect( Product, '[SalesLT].[Product]' ); ClearCollect( Customer, '[SalesLT].[Customer]' ); ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' ); ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' )En Microsoft Edge o Google Chrome, active las herramientas de desarrollador para supervisar el tráfico de red mientras se ejecuta la aplicación.
(Opcional) Active el límite de red para exagerar los efectos de esta comparación.
Mientras mantiene presionada la tecla Alt, seleccione el botón y luego observe el tráfico de red.
Las herramientas muestran cuatro solicitudes realizadas en serie similares a este ejemplo. Los tiempos reales se han quitado a medida que varían de forma salvaje. El gráfico muestra que cada llamada se inicia una vez finalizada la última:
Guarde, cierre y vuelva a abrir la aplicación.
Power Apps almacena los datos en caché, por lo que al volver a seleccionar el botón no se realizan necesariamente cuatro nuevas solicitudes. Cada vez que quiera probar el rendimiento, cierre y vuelva a abrir la aplicación. Si ha activado el límite de red, puede desactivarlo hasta que esté listo para otra prueba.
Agregue un segundo control Button y establezca su propiedad OnSelect en esta fórmula:
Concurrent( ClearCollect( Product, '[SalesLT].[Product]' ), ClearCollect( Customer, '[SalesLT].[Customer]' ), ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' ), ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' ) )Tenga en cuenta que ha agregado las mismas llamadas a ClearCollect al primer botón, pero se encapsulan en una Concurrent función y se separan por comas esta vez.
Desactive la supervisión de red en el explorador.
Si antes estaba usando el límite de red, vuelva a activarlo.
Mientras mantiene presionada la tecla Alt, seleccione el segundo botón y luego observe el tráfico de red.
Las herramientas muestran cuatro solicitudes realizadas de forma simultánea similares a este ejemplo. De nuevo, los tiempos reales se han quitado a medida que varían salvajemente. El gráfico muestra que todas las llamadas comienzan aproximadamente al mismo tiempo y no esperan a que finalice la anterior:
Estos gráficos se basan en la misma escala. ConcurrentCon , ha reducido la cantidad total de tiempo que tardaron en finalizar estas operaciones.
Guarde, cierre y vuelva a abrir la aplicación.
Condición Race
Agregue una conexión al servicio Microsoft Translator en la aplicación.
Agregue un control Text input y, si tiene otro nombre, cámbielo a TextInput1.
Agregue un control Button y establezca su propiedad OnSelect en esta 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 } )Agregue un control Data table y establezca su propiedad Items en Results.
En la pestaña Propiedades del panel derecho, seleccione Editar campos para abrir el panel Campos.
En la lista de campos, active la casilla de cada campo para mostrarlos todos en la tabla de datos.
(Opcional) Arrastre el campo Input a la parte superior de la lista y el campo FrenchFaster a la parte inferior.
En el control Text input, escriba o pegue una frase que quiera traducir.
Mientras mantiene presionada la tecla Alt, seleccione el botón varias veces para rellenar la tabla.
Las horas se muestran en milisegundos.
En algunos casos, la traducción al francés es más rápida que la traducción al alemán y viceversa. Ambos se inician al mismo tiempo, pero uno vuelve antes que el otro por varias razones, incluida la latencia de red y el procesamiento del lado servidor.
Se produce una condición de carrera si la aplicación dependía de que una traducción terminara primero. Afortunadamente, Power Apps marca la mayoría de las dependencias de tiempo que puede detectar.