Compartir por


Función concurrente

Aplícase a: Aplicacións de lenzo Aplicacións baseadas en modelos

Avalía varias fórmulas de xeito simultáneo entre si.

Descripción

A función Concurrent permite avaliar ao mesmo tempo varias fórmulas especificadas dentro da mesma propiedade se teñen un conector ou chamadas de Dataverse. Normalmente, as fórmulas múltiples avalíanse encadeándoas co operador ; (punto e coma), que avalía cada fórmula secuencialmente. Coa función Concurrent, a aplicación avaliará todas as fórmulas dunha propiedade ao mesmo tempo mesmo despois de usar o operador ;. Esta simultaneidade axudará aos usuarios a esperar menos polo mesmo resultado.

Na propiedade OnStart da súa aplicación, use Simultáneo para mellorar o rendemento cando a aplicación carga datos. Cando as chamadas de datos non comezan ata que rematan as chamadas anteriores, a aplicación deberá agardar a suma de todos os tempos de solicitude. Se as chamadas de datos comezan ao mesmo tempo, a aplicación só debe agardar o tempo de solicitude máis longo. Os navegadores web con frecuencia melloran o rendemento realizando chamadas de rede ao mesmo tempo.

Non pode prever a orde en que as fórmulas da función Simultánea inician e finalizan a avaliación. As fórmulas dentro da función Simultánea non deberían conter dependencias doutras fórmulas dentro da mesma función Simultánea e Power Apps mostra un erro se o intenta. Desde dentro, pode tomar dependencias de fórmulas externas á función Simultánea de xeito seguro porque se completarán antes de que inicie a función Simultánea. As fórmulas posteriores á función Simultánea poden tomar dependencias de fórmulas con seguridade: todas se completarán antes de que a función Simultánea finalice e pase á seguinte fórmula dunha cadea (se usa o operador ;). Estea atento ás dependencias sutís dos pedidos se está chamando a funcións ou métodos de servizo que teñen efectos secundarios.

Pode encadear fórmulas co operador ; dentro dun argumento a Simultáneo. Por exemplo, Concurrent( Set( a, 1 ); Set( b, a+1 ), Set( x, 2 ); Set( y, x+2 ) ) avalía Set( a, 1 ); Set( b, a+1 ) de xeito simultáneo con Set( x, 2 ); Set( y, x+2 ). Neste caso, as dependencias das fórmulas están ben: a establecerase antes de b e x establecerase antes de y.

Dependendo do dispositivo ou navegador no que estea executando a aplicación, só se poderá avaliar simultaneamente un bo número de fórmulas. Concurrent utiliza as capacidades dispoñibles e non rematará ata que todas as fórmulas sexan avaliadas.

Se activa Xestión de erros a nivel de fórmula (en configuración avanzada), devolverá o primeiro erro atopado na orde de argumentos de Simultáneo; do contrario, devolverase en branco. Se todas as fórmulas teñen éxito, devolverase verdadeiro. Se unha fórmula falla, o resto desa fórmula detense, pero as outras fórmulas seguen avaliando.

Só pode usar Simultáneo en fórmulas de comportamento.

Sintaxe

Simultáneo( Fórmula1, Fórmula2 [, ...] )

  • Fórmulas – Obrigatorio. Fórmulas para avaliar simultaneamente. Debe fornecer polo menos dúas fórmulas.

Exemplos

Cargar datos máis rapidamente

  1. Cree unha aplicación e engada catro orixes de datos de Microsoft Dataverse, SQL Server ou SharePoint.

    Este exemplo usa catro táboas de Base de datos de mostras de Adventure Works en SQL Azure. Despois de crear a base de datos, conéctese a ela desde Power Apps usando o nome do servidor completamente cualificado (por exemplo, srvname.database.windows.net):

    Conectarse cunha base de datos de Adventure Works en Azure.

  2. Engada un control de Button e axuste a súa propiedade OnSelect nesta fórmula:

    ClearCollect( Product, '[SalesLT].[Product]' );
    ClearCollect( Customer, '[SalesLT].[Customer]' );
    ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' );
    ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' )
    
  3. En Microsoft Edge ou Google Chrome, active as ferramentas de desenvolvedores para supervisar o tráfico da rede mentres a aplicación está en funcionamento.

  4. (opcional) Active a aceleración da rede para esaxerar os efectos desta comparación.

  5. Mentres manteña a tecla Alt premida, seleccione o botón e vexa o tráfico da rede.

    As ferramentas amosan catro solicitudes realizadas en serie, semellantes a este exemplo. Os tempos reais elimináronse xa que variarán de xeito amplo. A gráfica mostra que cada chamada comeza unha vez rematada a última:

    Gráfico horario de catro solicitudes de rede, cada unha comezando despois de rematar a última, cubrindo todo o período de tempo.

  6. Garde, peche e abra de novo a aplicación.

    Power Apps almacena datos na caché, polo que seleccionar o botón de novo non necesariamente provocará catro novas solicitudes. Cada vez que queira probar o rendemento, peche e volva abrir a aplicación. Se activou a aceleración da rede, poderá desactivala ata que estea listo para outra proba.

  7. Engada un segundo control de Botón e axuste a súa propiedade OnSelect nesta fórmula:

    Concurrent(
        ClearCollect( Product, '[SalesLT].[Product]' ),
        ClearCollect( Customer, '[SalesLT].[Customer]' ),
        ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' ),
        ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' )
    )
    

    Teña en conta que engadiu as mesmas chamadas ClearCollect ao primeiro botón, pero están envoltas nunha función Simultánea e separados por comas neste momento.

  8. Borre o monitor de rede no navegador.

  9. Se estaba usando a aceleración da rede antes, volva activala.

  10. Mentres manteña a tecla Alt premida, seleccione o segundo botón e vexa o tráfico da rede.

    As ferramentas amosan catro solicitudes realizadas á vez, semellantes a este exemplo. Novamente, os tempos reais elimináronse xa que variarán de xeito amplo. O gráfico mostra que todas as chamadas comezan aproximadamente ao mesmo tempo e non agardan a que remate a anterior:

    Gráfico de hora de catro solicitudes de rede, as catro comezando xuntas, cubrindo aproximadamente a metade do período de tempo.

    Estes gráficos baséanse na mesma escala. Ao empregar Simultáneo, reduciu á metade o tempo total que tardaron estas operacións.

  11. Garde, peche e abra de novo a aplicación.

Condición carreira

  1. Engade unha conexión ao servizo Microsoft Translator á túa aplicación.

  2. Engada un control de Entrada de texto e cámbielle o nome a TextInput1 se ten un nome diferente.

  3. Engada un control de Botón e axuste a súa propiedade OnSelect nesta 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
        }
    )
    
  4. Engada un control de Táboa de datos e estableza a súa propiedade Items en Resultados.

  5. No separador Propiedades do panel dereito, seleccione Editar campos para abrir o panel Campos.

  6. Na lista de campos, seleccione a caixa de verificación de cada campo para mostralos na táboa de datos.

  7. (opcional) Arrastre o campo Entrada á parte superior da lista e arrastre o campo FrenchFaster ao final da lista.

    Lista de campos da colección Resultado.

  8. No control Entrada de texto, escriba ou pegue unha frase para traducir.

  9. Mentres mantén premida a tecla Alt, seleccione o botón varias veces para encher a táboa.

    Os tempos móstranse en milisegundos.

    Mostra da táboa de datos que contén resultados de traducir a cadea

    Nalgúns casos, a tradución ao francés é máis rápida que a tradución ao alemán e viceversa. Ambos comezan ao mesmo tempo, pero un volve antes que o outro por varias razóns, incluíndo a latencia da rede e o procesamento do servidor.

    Produciríase un estado de carreira se a aplicación dependese da finalización dunha tradución primeiro. Afortunadamente, Power Apps marca a maioría das dependencias de tempo que pode detectar.