Споделяне чрез


Едновременна функция

Отнася се за: Приложения за платно Приложения, задвижвани от модели

Оценява множество формули едновременно една с друга.

Описание

Функцията Concurrent позволява множество формули, посочени в едно и също свойство, да бъдат оценени едновременно, ако имат конектор или Dataverse извиквания. Обикновено множество формули се оценяват, като ги свързват заедно с ; (точка и запетая) оператор, който оценява всяка формула последователно. С функцията Concurrent приложението ще оценява едновременно всички формули в дадено свойство дори след използване на ; оператор. Тази паралелност ще помогне на потребителите да чакат по-малко за същия резултат.

В OnStart свойството на вашето приложение, използвайте Concurrent за подобряване на ефективността, когато приложението зарежда данни. Когато разговорите за данни не започват, докато предишните разговори не завършат, приложението трябва да изчака сумата от всички времена на заявка. Ако повикванията за данни започват едновременно, приложението трябва да изчака само най-дългото време за заявка. Уеб браузърите често подобряват производителността, като изпълняват мрежови повиквания едновременно.

Не можете да предвидите реда, в който формули в рамките на функцията Concurrent начална и крайна оценка на функцията. Формули в рамките на Concurrent функция не трябва да съдържа зависимости от други формули в същата Concurrent функция и Power Apps показва грешка, ако се опитате. Отвътре можете спокойно да приемате зависимости от формули извън Concurrent функция, защото те ще завършат преди Concurrent функция стартира. Формули след Concurrent функцията може безопасно да приема зависимости от формули в рамките на: всички те ще бъдат завършени преди Concurrent функция да завършва и преминава към следващата формула във веригата (ако използвате ; оператор). Внимавайте за фините зависимости на поръчката, ако извиквате функции или методи на обслужване, които имат странични ефекти.

Можете да свържете формули заедно с ; оператор в рамките на аргумент до Concurrent. Например Concurrent( Set( a, 1 ); Set( b, a+1 ), Set( x, 2 ); Set( y, x+2 ) ) оценява Set( a, 1 ); Set( b, a+1 ) едновременно с Set( x, 2 ); Set( y, x+2 ). В този случай зависимостите във формулите са добре: а ще бъде зададено преди b и х ще бъде зададено преди y.

В зависимост от устройството или браузъра, в който приложението работи, само шепа формули могат действително да бъдат оценявани едновременно. Concurrent използва наличните възможности и няма да завърши, докато не бъдат оценени всички формули.

Ако активирате Управление на грешки на ниво формула (в разширени настройки), първата грешка, срещната в ред на аргументи, се връща от Concurrent; в противен случай, празно се връща. Ако всички формули са успешни, вярно се връща. Ако една формула се провали, останалата част от нея спира, но други формули продължават да оценяват.

Можете да използвате Concurrent само във формули на поведение.

Синтаксис

Concurrent( Formula1, Formula2 [, ...] )

  • Formula(s) - Задължително. Формули за оценка едновременно. Трябва да предоставите поне две формули.

Примери

По-бързо зареждане на данни

  1. Създайте приложение и добавете четири източника на данни от Microsoft Dataverse, SQL Server или SharePoint.

    Този пример използва четири таблици от примерна база данни Adventure Works на SQL Azure. След като създадете базата данни, свържете се с нея от Power Apps, използвайки напълно квалифицираното име на сървъра (например, srvname.database.windows.net):

    Свързване с база данни Adventure Works в Azure.

  2. Добавете контрола Button и задайте свойството й OnSelect на тази формула:

    ClearCollect( Product, '[SalesLT].[Product]' );
    ClearCollect( Customer, '[SalesLT].[Customer]' );
    ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' );
    ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' )
    
  3. В Microsoft Edge или Google Chrome, включете инструментите за разработчици, за да наблюдавате мрежовия трафик, докато приложението ви работи.

  4. (незадължително) Включете мрежовото дроселиране, за да преувеличите ефектите от това сравнение.

  5. Докато държите клавиша Alt, изберете бутона и след това наблюдавайте мрежовия трафик.

    Инструментите показват четири заявки, изпълнени в серия, подобно на този пример. Действителните времена са премахнати, тъй като те ще се различават силно. Графиката показва, че всяко обаждане започва след последното приключване:

    Графика на време от четири мрежови заявки, всяка от които започва след последното завършване, обхващаща целия период от време.

  6. Запазете, затворете и отворете отново приложението си.

    Power Apps кешира данни, така че избирането на бутона отново не е задължително да предизвика четири нови заявки. Всеки път, когато искате да тествате ефективността, затворете и отворете отново приложението си. Ако сте включили мрежовото дроселиране, може да искате да го изключите, докато не сте готови за друг тест.

  7. Добавете втора контрола бутон и задайте свойството й OnSelect на тази формула:

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

    Обърнете внимание, че сте добавили същите повиквания на ClearCollect към първия бутон, но те са обвити в Concurrent функция и разделена със запетаи този път.

  8. Изчистете мрежовия монитор в браузъра.

  9. Ако преди сте използвали мрежово дроселиране, включете го отново.

  10. Докато държите клавиша Alt, изберете втория бутон и след това наблюдавайте мрежовия трафик.

    Инструментите показват четири заявки, едновременно подобно на този пример. Отново, действителните времена са премахнати, тъй като те ще се различават силно. Графиката показва, че всички обаждания започват приблизително по едно и също време и не чакат да приключи предишното:

    График на време от четири мрежови заявки, като всичките четири започват заедно, обхващат около половината от периода.

    Тези графики са базирани на една и съща скала. Като се използва Concurrent, намалихте наполовина общото количество време, необходимо за извършване на тези операции.

  11. Запазете, затворете и отворете отново приложението си.

Условие за състезание

  1. Добавете връзка към Microsoft Translator услугата на вашето приложение.

  2. Добавете Въвеждане на текст контрола и я преименувайте на TextInput1, ако има различно име.

  3. Добавете контрола бутон и задайте свойството й OnSelect на тази формула:

    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. Добавете контрола Таблица с данни и задайте свойството й Елементи на Резултати.

  5. В раздела Свойства близо до десния екран, изберете Редактиране на полета, за да отворите екрана Полета.

  6. В списъка с полета поставете отметка в квадратчето за всяко поле, за да ги покажете всички в таблицата с данни.

  7. (незадължително) Плъзнете полето Входв горната част на списъка и плъзнете FrenchFaster поле в края на списъка.

    Списък с полета в колекцията с резултати.

  8. В контролата Въвеждане на текст въведете или поставете фраза за превод.

  9. Докато държите клавиша Alt, изберете бутона няколко пъти, за да попълните таблицата.

    Времената са показани в милисекунди.

    Показване на таблицата с данни, съдържаща резултатите от превода на низа

    В някои случаи френският превод е по-бърз от немския и обратно. И двете стартират едновременно, но едната се връща преди другата по различни причини, включително закъснение в мрежата и обработка от страна на сървъра.

    Състояние на състезание ще възникне, ако приложението зависи от един превод, който завършва първо. За щастие, Power Apps маркира повечето зависимости от времето, които може да открие.