แชร์ผ่าน


ฟังก์ชัน Concurrent

ใช้กับ: แอปพื้นที่ทำงาน แอปแบบจำลอง

ประเมินสูตรหลายสูตรพร้อมกันกับอีกสิ่งหนึ่ง

คำอธิบาย

ฟังก์ชัน 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( Formula1, Formula2 [, ...] )

  • Formula(s) - จำเป็นต้องมี สูตรที่จะประเมินพร้อมๆ กัน คุณต้องใส่สูตรอย่างน้อยสองสูตร

ตัวอย่าง

โหลดข้อมูลได้เร็วขึ้น

  1. สร้างแอปและเพิ่มแหล่งข้อมูลสี่แหล่ง จาก Microsoft Dataverse SQL Server หรือ SharePoint

    ตัวอย่างนี้ใช้ตารางสี่ตาราง จาก ฐานข้อมูล Adventure Works ตัวอย่าง บน SQL Azure หลังจากที่คุณสร้างฐานข้อมูลแล้ว ให้เชื่อมต่อกับ Power Apps โดยใช้ชื่อเซิร์ฟเวอร์แบบเต็ม (ตัวอย่างเช่น srvname.database.windows.net):

    เชื่อมต่อกับฐานข้อมูล Adventure Works ใน Azure

  2. เพิ่มตัวควบคุม ปุ่ม และตั้งค่าคุณสมบัติ 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. เพิ่มตัวควบคุม ตารางข้อมูล และตั้งค่าคุณสมบัติ Items เป็น ผลลัพธ์

  5. บนแท็บ คุณสมบัติ ของบานหน้าต่างด้านขวา ให้เลือก แก้ไขฟิลด์ เพื่อเปิดบานหน้าต่าง ฟิลด์

  6. ในรายการของฟิลด์ เลือกกล่องกาเครื่องหมายสำหรับแต่ละฟิลด์ เพื่อแสดงรายการทั้งหมดในตารางข้อมูล

  7. (ไม่บังคับ) ลากฟิลด์ ป้อนเข้า ไปยังด้านบนของรายการ และลากฟิลด์ฟิลด์ FrenchFaster ไปยังด้านล่างของรายการ

    รายการฟิลด์ในคอลเลกชันผลลัพธ์

  8. ในตัวควบคุม การป้อนข้อความ ให้พิมพ์หรือวางวลีที่จะแปล

  9. ในขณะที่กดแป้น Alt ค้างไว้ ให้เลือกปุ่มหลายๆ ครั้งเพื่อกรอกข้อมูลในตาราง

    เวลาจะแสดงเป็นมิลลิวินาที

    การแสดงตารางข้อมูลที่มีผลการแปลสตริง

    ในบางกรณี การแปลภาษาฝรั่งเศสจะเร็วกว่าการแปลภาษาเยอรมัน และการแปลภาษาเยอรมันจะเร็วกว่าการแปลภาษาฝรั่งเศสก็ได้ด้วย ทั้งสองเริ่มต้นในเวลาเดียวกัน แต่หนึ่งภาษาจะส่งกลับมาก่อนภาษาอื่นสำหรับหลายๆ เหตุผล รวมถึงความล่าช้าของเครือข่ายและการประมวลผลฝั่งเซิร์ฟเวอร์

    สภาวะการแย่งชิง อาจเกิดขึ้นถ้าแอปขึ้นอยู่กับการสิ้นสุดการแปลหนึ่งก่อน โชคดีที่ Power Apps ทำเครื่องหมายการขึ้นต่อกันของการกำหนดเวลาส่วนใหญ่ที่สามารถตรวจหาได้