Bagikan melalui


Fungsi bersamaan

Berlaku untuk: Aplikasi kanvas Aplikasi berdasarkan model

Mengevaluasi beberapa rumus secara bersamaan satu sama lain.

Description

Fungsi Concurrent memungkinkan beberapa rumus yang ditentukan dalam properti yang sama untuk dievaluasi pada waktu bersamaan jika memiliki konektor atau panggilan Dataverse. Biasanya, beberapa rumus dievaluasi oleh penautan bersama-sama dengan operator ; (titik koma) yang mengevaluasi masing-masing rumus secara berurutan. Dengan fungsi Concurrent, aplikasi akan mengevaluasi semua rumus dalam properti secara bersamaan bahkan setelah menggunakan Operator ;. Keserempakan ini akan membantu pengguna menunggu lebih cepat untuk hasil yang sama.

Di properti OnStart aplikasi Anda, gunakan Concurrent untuk meningkatkan performa saat aplikasi memuat data. Bila panggilan data tidak dimulai hingga panggilan sebelumnya selesai, aplikasi harus menunggu total semua permintaan. Jika panggilan data dimulai pada waktu yang sama, aplikasi harus menunggu hanya untuk waktu permintaan terlama. Browser web sering meningkatkan performa dengan melakukan panggilan jaringan secara bersamaan.

Anda tidak dapat memprediksi urutan rumus dalam evaluasi awal dan akhir fungsi Concurrent. Rumus dalam fungsi Concurrent tidak boleh berisi dependensi pada rumus lain dalam fungsi Concurrent yang sama, dan Power Apps menampilkan kesalahan jika Anda coba. Dari dalam, Anda dapat dengan aman melakukan dependensi pada rumus di luar fungsi Concurrent karena akan selesai sebelum fungsi Concurrent dimulai. Formula setelah fungsi Concurrent dapat dengan aman melakukan dependensi pada rumus di dalamnya: semua rumus selesai sebelum fungsi Concurrent selesai dan beralih ke rumus berikutnya dalam rantai (jika Anda menggunakan operator ;). Lihat untuk dependensi urutan sempurna jika Anda memanggil metode fungsi atau layanan yang memiliki efek samping.

Anda dapat mengaitkan rumus bersama-sama dengan operator ; dalam argumen untuk Concurrent. Misalnya, Concurrent( Set( a, 1 ); Set( b, a+1 ), Set( x, 2 ); Set( y, x+2 ) ) mengevaluasi Set( a, 1 ); Set( b, a+1 ) secara bersamaan dengan Set( x, 2 ); Set( y, x+2 ). Dalam kasus ini, dependensi dalam rumusnya berjalan dengan lancar: a akan diatur sebelum b, dan x akan diatur sebelum y.

Tergantung pada perangkat atau browser tempat aplikasi berjalan, hanya beberapa rumus yang benar-benar dievaluasi secara bersamaan. Concurrent menggunakan kemampuan yang tersedia dan tidak akan selesai hingga semua rumus dievaluasi.

Jika Anda mengaktifkan Manajemen kesalahan tingkat rumus (dalam pengaturan lanjutan), kesalahan pertama yang terjadi dalam urutan argumen dihasilkan dari Concurrent ; atau, blank akan dihasilkan. Jika semua rumus berhasil, true akan dihasilkan. Jika satu rumus gagal, sisa rumus tersebut akan berhenti, namun rumus lainnya terus mengevaluasinya.

Anda hanya dapat menggunakan Concurrent dalam rumus perilaku.

Sintaks

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

  • Formula – Wajib. Rumus untuk mengevaluasi secara bersamaan. Anda harus memasok minimal dua rumus.

Contoh

Memuat data lebih cepat

  1. Buat aplikasi, dan tambahkan empat sumber data dari Microsoft Dataverse, SQL Server, atau SharePoint.

    Contoh ini menggunakan empat tabel dari database Adventure Works contoh di SQL Azure. Setelah membuat database, sambungkan dari Power Apps menggunakan nama server yang sepenuhnya memenuhi syarat (misalnya, srvname.database.windows.net):

    Sambungkan ke database Adventure Works di Azure.

  2. Tambahkan kontrol Button dan atur properti OnSelect ke rumus ini:

    ClearCollect( Product, '[SalesLT].[Product]' );
    ClearCollect( Customer, '[SalesLT].[Customer]' );
    ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' );
    ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' )
    
  3. Di Microsoft Edge atau Google Chrome, aktifkan alat pengembang untuk memantau lalu lintas jaringan saat aplikasi berjalan.

  4. (opsional) Aktifkan pengontrolan jaringan untuk memperbesar dampak perbandingan ini.

  5. Sambil menekan terus tombol Alt, pilih tombol, lalu lihat lalu lintas jaringan.

    Alat ini menunjukkan empat permintaan yang dilakukan dalam rangkaian, mirip dengan contoh ini. Waktu yang sebenarnya telah dihapus karena akan bervariasi secara tidak terkendali. Grafik menunjukkan bahwa setiap panggilan dimulai setelah yang terakhir telah selesai:

    Grafik waktu empat permintaan jaringan, masing-masing dimulai setelah yang terakhir selesai, mencakup seluruh rentang waktu.

  6. Simpan, tutup, dan buka kembali aplikasi.

    Power Apps meng-cache data, sehingga memilih tombol lagi tidak akan menyebabkan empat permintaan baru. Setiap kali Anda ingin menguji performa, tutup dan buka kembali aplikasi. Jika Anda menonaktifkan pengontrolan jaringan, Anda mungkin ingin menonaktifkannya hingga Anda siap melakukan pengujian lain.

  7. Tambahkan kontrol Tombol kedua dan atur properti OnSelect ke rumus ini:

    Concurrent(
        ClearCollect( Product, '[SalesLT].[Product]' ),
        ClearCollect( Customer, '[SalesLT].[Customer]' ),
        ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' ),
        ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' )
    )
    

    Perhatikan bahwa Anda menambahkan panggilan ClearCollect yang sama ke tombol pertama, namun akan digabungkan dalam fungsi Concurrent dan dipisahkan dengan koma kali ini.

  8. Hapus monitor jaringan di browser.

  9. Jika Anda menggunakan pengontrolan jaringan sebelumnya, aktifkan kembali.

  10. Sambil menekan terus tombol Alt, pilih tombol kedua, lalu lihat lalu lintas jaringan.

    Alat ini menunjukkan empat permintaan yang dilakukan secara bersamaan, mirip dengan contoh ini. Sekali lagi, waktu yang sebenarnya telah dihapus karena akan bervariasi secara tidak terkendali. Grafik menunjukkan bahwa semua panggilan dimulai pada waktu yang sama dan jangan tunggu yang sebelumnya untuk menyelesaikan:

    Grafik waktu empat permintaan jaringan, ke-empatnya dimulai bersama-sama, mencakup sekitar setengah dari rentang waktu.

    Grafik ini didasarkan pada skala yang sama. Dengan menggunakan Concurrent, Anda akan mengurangi setengah jumlah total waktu yang diperlukan untuk menyelesaikan operasi ini.

  11. Simpan, tutup, dan buka kembali aplikasi.

Ketentuan Race

  1. Tambahkan sambungan ke layanan Microsoft Translator ke aplikasi Anda.

  2. Tambahkan kontrol Input teks, dan namai kembali TextInput1 jika memiliki nama yang berbeda.

  3. Tambahkan kontrol Tombol dan atur properti OnSelect ke rumus ini:

    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. Tambahkan kontrol Tabel data dan atur properti Item ke Hasil.

  5. Pada tab Properti di panel sebelah kanan, pilih Edit bidang untuk membuka panel Bidang.

  6. Di daftar bidang, pilih kotak centang untuk setiap bidang untuk menampilkan semua di tabel data.

  7. (opsional) Tarik Input ke bagian atas daftar, dan tarik bidang FrenchFaster ke bagian bawah daftar.

    Daftar bidang pada koleksi Hasil.

  8. Di kontrol Input teks, ketik atau tempel frasa untuk diterjemahkan.

  9. Sambil menekan terus tombol Alt, pilih tombol beberapa kali untuk mengisi tabel.

    Waktu ditampilkan dalam milidetik.

    Tampilan tabel data yang berisi hasil penerjemahan string

    Dalam beberapa kasus, terjemahan bahasa Perancis lebih cepat daripada terjemahan bahasa Jerman, dan sebaliknya. Kedua mulai pada waktu yang sama, namun salah satunya akan menghasilkan sebelum yang lainnya karena berbagai alasan, termasuk latensi jaringan dan pemrosesan sisi server.

    Ketentuan race akan terjadi jika aplikasi tergantung pada satu terjemahan yang berakhir terlebih dulu. Untungnya, Power Apps menandai sebagian besar dependensi pewaktuan yang dapat dideteksi.