적용 대상: 캔버스 앱
모델 기반 앱
동시에 서로 여러 수식을 평가합니다.
설명
이 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 ) ) evaluates Set( a, 1 ); Set( b, a+1 )Set( x, 2 ); Set( y, x+2 ). 이 경우에 수식 내에서 종속성에는 문제가 없습니다. a는 b 전에 설정되고 x는 y 전에 설정됩니다.
앱이 실행되는 디바이스 또는 브라우저에 따라 일부 수식만이 실제로 동시에 계산될 수 있습니다. Concurrent 는 사용 가능한 기능을 사용하며 모든 수식이 평가될 때까지 완료되지 않습니다.
고급 설정에서 수식 수준 오류 관리를 사용하도록 설정하면 인수 순서에서 발생한 첫 번째 오류가 반환 Concurrent되고, 그렇지 않으면 공백 이 반환됩니다. 모든 수식이 성공하는 경우 true가 반환됩니다. 하나의 수식이 실패하면 해당 수식의 나머지는 중지되지만 다른 수식은 계속 평가합니다.
동작 수식에서만 사용할 Concurrent 수 있습니다.
구문
Concurrent( Formula1, Formula2 [, ...] )
- 수식 – 필수. 동시에 평가할 수식입니다. 적어도 두 개의 수식을 제공해야 합니다.
예제
신속하게 데이터 로드
앱을 만들고 Microsoft Dataverse, SQL Server, 또는 SharePoint의 데이터 원본을 네 개를 추가합니다.
이 예제에서는 SQL Azure의 샘플 Adventure Works 데이터베이스에서 네 개의 테이블을 사용합니다. 데이터베이스를 만든 후에 정규화된 서버 이름(예: srvname.database.windows.net)을 사용하여 Power Apps에서 연결합니다.
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가 데이터를 캐시하여 단추를 다시 선택해도 네 가지 새로운 요청이 발생되지 않습니다. 성능을 테스트할 때마다 앱을 닫고 다시 엽니다. 네트워크 제한을 설정한 경우 다른 테스트에 대해 준비가 될 때까지 해제하는 것이 좋습니다.
두 번째 Button 컨트롤을 추가하고 OnSelect 속성을 다음 수식으로 설정합니다.
Concurrent( ClearCollect( Product, '[SalesLT].[Product]' ), ClearCollect( Customer, '[SalesLT].[Customer]' ), ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' ), ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' ) )첫 번째 단추에 동일한 ClearCollect 호출을 추가했지만 이번에는 함수에 Concurrent 래핑되고 쉼표로 구분됩니다.
브라우저에서 네트워크 모니터를 지웁니다.
이전에 네트워크 제한을 사용한 경우 다시 설정합니다.
Alt 키를 누른 채 두 번째 단추를 선택한 다음, 네트워크 트래픽을 확인합니다.
도구에서는 이 예제와 비슷하게 동시에 수행된 네 개의 요청을 보여줍니다. 다시 말하지만, 실제 시간은 격렬하게 변화하기 때문에 제거되었습니다. 그래프는 모든 호출이 거의 동시에 시작되며 이전 호출이 완료되기를 기다리지 않음을 보여줍니다.
이러한 그래프는 동일한 규모를 기반으로 합니다. 이러한 Concurrent작업을 완료하는 데 걸린 총 시간을 절반으로 줄입니다.
앱을 저장하고, 닫고, 다시 엽니다.
경합 조건
Microsoft Translator 서비스에 대한 연결을 앱에 추가합니다.
Text input 컨트롤을 추가하고, 다른 이름이 있는 경우 이름을 TextInput1로 지정합니다.
Button 컨트롤을 추가하고 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 } )Data table 컨트롤을 추가하고 Items 속성을 Results로 설정합니다.
오른쪽 창의 속성 탭에서 필드 편집을 선택하여 필드 창을 엽니다.
필드 목록에서 각 필드에 대한 확인란을 선택하여 데이터 테이블에서 모두 표시합니다.
(선택 사항) 입력 필드를 목록의 맨 위로 끌어오고 FrenchFaster 필드를 목록 맨 아래로 끌어옵니다.
Text input 컨트롤에서 변환할 문구를 입력하거나 붙여넣습니다.
Alt 키를 누른 채 단추를 여러 번 선택하여 테이블을 채웁니다.
시간은 밀리초 단위로 표시됩니다.
경우에 따라 프랑스어 번역이 독일어 번역보다 빠르고 반대로도 가능합니다. 둘 다 동시에 시작되지만 네트워크 대기 시간 및 서버 쪽 처리를 비롯한 여러 가지 이유로 다른 항목 앞에 반환됩니다.
앱이 먼저 종료한 한 가지 번역을 사용하는 경우 경합 조건이 발생합니다. 다행스럽게도 Power Apps는 감지할 수 있는 대부분의 타이밍 종속성의 플래그를 지정합니다.