Бележка
Достъпът до тази страница изисква удостоверяване. Можете да опитате да влезете или да промените директориите.
Достъпът до тази страница изисква удостоверяване. Можете да опитате да промените директориите.
Отнася се за: Приложения
за платно, базирани на модел приложения
Оценява множество формули едновременно една с друга.
Описание
Функцията 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( Формула1, Формула2 [, ...] )
- Формули – Задължително. Формули за оценка едновременно. Трябва да предоставите поне две формули.
Примери
По-бързо зареждане на данни
Създайте приложение и добавете четири източника на данни от Microsoft Dataverse, SQL Server или SharePoint.
Този пример използва четири таблици от примерна база данни Adventure Works на SQL Azure. След като създадете базата данни, свържете се с нея от Power Apps, използвайки напълно квалифицираното име на сървъра (например, srvname.database.windows.net):
Добавете контрола Button и задайте свойството й OnSelect на тази формула:
ClearCollect( Product, '[SalesLT].[Product]' ); ClearCollect( Customer, '[SalesLT].[Customer]' ); ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' ); ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' )В Microsoft Edge или Google Chrome, включете инструментите за разработчици, за да наблюдавате мрежовия трафик, докато приложението ви работи.
(незадължително) Включете мрежовото дроселиране, за да преувеличите ефектите от това сравнение.
Докато държите клавиша Alt, изберете бутона и след това наблюдавайте мрежовия трафик.
Инструментите показват четири заявки, изпълнени в серия, подобно на този пример. Действителното време е премахнато, тъй като те варират диво. Графиката показва, че всяко обаждане започва след последното приключване:
Запазете, затворете и отворете отново приложението си.
Power Apps кешира данни, така че избирането на бутона отново не е задължително да предизвика четири нови заявки. Всеки път, когато искате да тествате ефективността, затворете и отворете отново приложението си. Ако сте включили мрежовото дроселиране, може да искате да го изключите, докато не сте готови за друг тест.
Добавете втора контрола бутон и задайте свойството й OnSelect на тази формула:
Concurrent( ClearCollect( Product, '[SalesLT].[Product]' ), ClearCollect( Customer, '[SalesLT].[Customer]' ), ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' ), ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' ) )Имайте предвид, че сте добавили едни и същи повиквания ClearCollect към първия бутон, но този път те са пренесени във Concurrent функция, разделени със запетаи.
Изчистете мрежовия монитор в браузъра.
Ако преди сте използвали мрежово дроселиране, включете го отново.
Докато държите клавиша Alt, изберете втория бутон и след това наблюдавайте мрежовия трафик.
Инструментите показват четири заявки, едновременно подобно на този пример. И отново, действителното време е премахнато, тъй като те варират диво. Графиката показва, че всички повиквания започват приблизително по едно и също време и не чакат предишният да завърши:
Тези графики са базирани на една и съща скала. С помощта на Concurrentсте намалили наполовина общото време, което е отнело завършването на тези операции.
Запазете, затворете и отворете отново приложението си.
Условие за състезание
Добавете връзка към Microsoft Translator услугата на вашето приложение.
Добавете Въвеждане на текст контрола и я преименувайте на TextInput1, ако има различно име.
Добавете контрола бутон и задайте свойството й 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 } )Добавете контрола Таблица с данни и задайте свойството й Елементи на Резултати.
В раздела Свойства близо до десния екран, изберете Редактиране на полета, за да отворите екрана Полета.
В списъка с полета поставете отметка в квадратчето за всяко поле, за да ги покажете всички в таблицата с данни.
(незадължително) Плъзнете полето Входв горната част на списъка и плъзнете FrenchFaster поле в края на списъка.
В контролата Въвеждане на текст въведете или поставете фраза за превод.
Докато държите клавиша Alt, изберете бутона няколко пъти, за да попълните таблицата.
Времената са показани в милисекунди.
В някои случаи френският превод е по-бърз от немския и обратно. И двете започват едновременно, но едната се връща преди другата по различни причини, включително закъснение на мрежата и обработка от страна на сървъра.
Състояние на състезание ще възникне, ако приложението зависи от един превод, който завършва първо. За щастие, Power Apps маркира повечето зависимости от времето, които може да открие.