Нотатка
Доступ до цієї сторінки потребує авторизації. Можна спробувати ввійти або змінити каталоги.
Доступ до цієї сторінки потребує авторизації. Можна спробувати змінити каталоги.
Застосовується до: Програми canvas
Model-driven
Обчислення кількох формул одночасно.
Опис
Ця 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 ). У цьому випадку залежності в межах формул допустимі: a буде визначено перед b, а x буде визначено перед y.
Залежно від пристрою чи браузера, у якому працює програма, одночасно може бути обчислено лише декілька формул. Concurrent використовує доступні можливості та не завершиться, доки не буде обчислено всі формули.
Якщо ввімкнути керування помилками на рівні формул (у додаткових параметрах), повертається Concurrentперша помилка в порядку аргументів ; в іншому разі повертається пусте значення. Якщо всі формули обчислено успішно, повертається значення true. У разі неможливості виконання обчислення однієї формули припиняється обчислення іншої її частини, але не інших формул.
Використовувати можна 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 } )Додайте елемент керування Таблиця даних і встановіть для його властивості Items значення Results (Результати).
На вкладці Властивості в області праворуч виберіть елемент Редагувати поля, щоб відкрити область Поля.
У списку полів установіть прапорець для кожного поля, щоб вони відображалися в таблиці даних.
(Необов’язково) Перетягніть поле Input до верхньої частини списку, а поле FrenchFaster – до нижньої його частини.
В елементі керування Ввід тексту введіть або вставте фразу для перекладу.
Утримуючи клавішу Alt, натисніть кнопку кілька разів, щоб заповнити таблицю.
Час відображається в мілісекундах.
У деяких випадках переклад французькою мовою відбувається швидше, ніж німецькою, і навпаки. Обидва запускаються одночасно, але один повертається до іншого з різних причин, зокрема затримки мережі та обробки на сервері.
Якби програма залежала від одного перекладу, що завершується першим, виникла б умова змагання. На щастя, Power Apps позначає більшість часових залежностей, які може виявити.