الدالة Concurrent

ينطبق على: تطبيقات اللوحة التطبيقات المستندة إلى النموذج

تقييم معادلات متعددة في الوقت نفسه مع بعضها البعض.

الوصف

تتيح الوظيفة المتزامنة إمكانية تقييم المعادلات المتعددة المحددة داخل نفس الخاصية في نفس الوقت إذا كان بها موصل أو مكالمات Dataverse . عادةً ما يتم تقييم المعادلات المتعددة من خلال ربطها ببعض باستخدام العامل ; الذي يقيم كل معادلة بشكل تسلسلي. باستخدام الوظيفة المتزامنة، سيقيم التطبيق جميع المعادلات داخل الخاصية بشكل متزامن حتى بعد استخدام ، المشغل. وهذه المتزامنة ستساعد المستخدمين على الانتظار بشكل أقل لنفس النتيجة.

في خاصية OnStart في تطبيقك، استخدم الوظيفة المتزامنة لتحسين الأداء عندما يقوم التطبيق بتحميل البيانات. عندما لا تبدأ مكالمات البيانات حتى تنتهي المكالمات السابقة، يجب أن ينتظر التطبيق مجموع كل أوقات الطلبات. إذا بدأت مكالمات البيانات في نفس الوقت، يحتاج التطبيق إلى الانتظار فقط لأطول وقت للطلب. غالبًا ما تعمل متصفحات الويب على تحسين الأداء عن طريق إجراء عمليات البيانات بشكل متزامن.

لا يمكنك التنبؤ بالترتيب الذي تبدأ وتنهي به المعادلات التقييم في الوظيفة المتزامنة. يجب ألا تحتوي الصيغ الموجودة في الوظيفة 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، وإلا فإنه يتم إرجاع فارغ. في حالة نجاح جميع الصيغ، فإنه يتم إرجاع صواب. إذا فشلت إحدى الصيغ، تتوقف بقية هذه الصيغ، ولكن تستمر الصيغ الأخرى في التقييم.

يمكنك استخدام الوظيفة Concurrent فقط في صيغ السلوك.

بناء الجملة

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

  • الصيغة (الصيغ) – مطلوبة. الصيغ المُراد تقييمها بشكل متزامن. يجب عليك توفير صيغتين على الأقل.

الأمثلة

تحميل البيانات بشكل أسرع

  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. أضف عنصر تحكم Button ثاني، وقم بتعيين خاصية 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. أضف عنصر تحكم Text input، وأعد تسميته بـ TextInput1، إذا كان له اسم مختلف.

  3. أضف عنصر تحكم 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
        }
    )
    
  4. أضف عنصر تحكم Data table، وقم بتعيين خاصية Items الخاصة به إلى النتائج.

  5. من علامة التبويب خصائص في الجزء الأيسر، حدد تحرير الحقول لفتح جزء الحقول.

  6. في قائمة الحقول، حدد خانة الاختيار لكل حقل لإظهارها جميعًا في جدول البيانات.

  7. (اختياري) اسحب حقل الإدخال إلى أعلى القائمة، واسحب حقل FrenchFaster إلى أسفل القائمة.

    قائمة الحقول في مجموعة النتائج.

  8. في عنصر تحكم Text input، اكتب جملة أو قم بلصقها للترجمة.

  9. أثناء الضغط على مفتاح Alt، حدد الزر عدة مرات لملء الجدول.

    يتم عرض الأوقات بالمللي ثانية.

    عرض جدول البيانات الذي يحتوي على نتائج ترجمة السلسلة

    في بعض الحالات، تكون الترجمة الفرنسية أسرع من الترجمة الألمانية، والعكس صحيح. كلتا الترجمتين تبدأن في نفس الوقت، ولكن إحدهما يُعرض قبل الآخر لعدة أسباب، بما في ذلك وقت استجابة الشبكة والمعالجة من جانب الخادم.

    قد تحدث حالة سباق في حاله انتهاء التطبيق المعتمد على ترجمة واحدة أولاً. ولحظنا، يقوم Power Apps بوضع علامات على معظم تبعيات التوقيت التي يمكنه اكتشافها.