Kongsi melalui


Fungsi serentak

Digunakan pada: Aplikasi kanvas Apl berpandukan model

Menilai berbilang formula secara serentak antara satu sama lain.

Penerangan

Fungsi Concurrent membenarkan berbilang formula yang ditentukan dalam sifat yang sama untuk dinilai pada masa yang sama jika ia mempunyai penyambung atau panggilan Dataverse. Biasanya, berbilang formula dinilai dengan merantaikan formula itu bersama dengan ; (koma bertitik) operator, yang menilai setiap formula secara berurutan. Dengan fungsi Concurrent, aplikasi akan menilai semua formula dalam sifat secara serentak walaupun selepas menggunakan pengendali ;. Keserentakan ini akan membantu mengurangkan masa menunggu pengguna untuk mendapatkan hasil yang sama.

Dalam sifat OnStart aplikasi anda, gunakan Concurrent untuk meningkatkan prestasi semasa aplikasi memuatkan data. Apabila panggilan data tidak dimulakan sehingga panggilan sebelumnya selesai, aplikasi mesti menunggu untuk jumlah semua masa permintaan. Jika panggilan data bermula pada masa yang sama, aplikasi hanya perlu menunggu untuk masa permintaan terpanjang. Pelayar web sering meningkatkan prestasi dengan melaksanakan panggilan rangkaian secara serentak.

Anda tidak boleh meramalkan urutan formula dalam penilaian fungsi Concurrent mula dan akhir. Formula dalam fungsi Concurrent tidak boleh mengandungi kebergantungan pada formula lain dalam fungsi Concurrent dan Power Apps menunjukkan ralat jika anda mencuba. Dari dalam, anda boleh menggunakan kebergantungan dengan selamat pada formula di luar fungsi Concurrent kerana ia akan selesai sebelum fungsi Concurrent bermula. Formula selepas fungsi Concurrent boleh mengambil kebergantungan kepada formula dengan selamat: semuanya akan selesai sebelum fungsi Concurrent selesai dan beralih kepada formula seterusnya dalam rantai (jika anda menggunakan pengendali ;). Berhati-hatilah untuk kebergantungan pesanan halus jika anda memanggil fungsi atau kaedah perkhidmatan yang mempunyai kesan sampingan.

Anda boleh merangkai formula bersama dengan pengendali ; dalam argumen dengan Concurrent. Sebagai contoh, Concurrent( Set( a, 1 ); Set( b, a+1 ), Set( x, 2 ); Set( y, x+2 ) ) menilai Set( a, 1 ); Set( b, a+1 ) secara serentak dengan Set( x, 2 ); Set( y, x+2 ). Dalam kes ini, kebergantungan dalam formula adalah baik:a akan ditetapkan sebelum b dan x akan ditetapkan sebelum y.

Bergantung pada peranti atau pelayar tempat aplikasi dijalankan, hanya sebilangan formula yang sebenarnya dapat dinilai secara serentak. Concurrent menggunakan keupayaan tersedia dan tidak akan selesai sehingga semua formula dinilai.

Jika anda mendayakan Pengurusan ralat peringkat formula (dalam tetapan lanjutan), ralat pertama yang dihadapi dalam urutan argumen dikembalikan dari Concurrent; jika tidak, kosong dikembalikan. Jika semua formula berjaya, benar dikembalikan. Jika satu formula gagal, selebihnya formula berhenti tetapi formula lain terus dinilai.

Anda boleh menggunakan Concurrent hanya dalam formulas tingkah laku.

Sintaks

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

  • Formula – Diperlukan. Formula untuk menilai secara serentak. Anda mesti membekalkan sekurang-kurangnya dua formula.

Contoh

Memuatkan data dengan lebih pantas

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

    Contoh ini menggunakan empat jadual dari sampel pangkalan data Adventure Works pada SQL Azure. Selepas anda mencipta pangkalan data, sambung kepadanya dari Power Apps menggunakan nama pelayan yang berkelayakan sepenuhnya (untuk contoh, srvname.database.windows.net):

    Sambung ke pangkalan data Adventure Works dalam Azure.

  2. Tambah kawalan Button, dan tetapkan sifat OnSelect ke formula ini:

    ClearCollect( Product, '[SalesLT].[Product]' );
    ClearCollect( Customer, '[SalesLT].[Customer]' );
    ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' );
    ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' )
    
  3. Dalam Microsoft Edge atau Google Chrome, hidupkan alat pembangun untuk memantau trafik rangkaian semasa aplikasi anda dijalankan.

  4. (pilihan) Hidupkan pendikitan rangkaian untuk menambahkan kesan perbandingan ini.

  5. Sambil menahan kekunci Alt, pilih butang dan kemudian perhatikan trafik rangkaian.

    Alat menunjukkan empat permintaan yang dilaksanakan secara bersiri, serupa dengan contoh ini. Masa sebenar telah dialih keluar kerana ia akan berbeza secara ketara. Grafik menunjukkan bahawa setiap panggilan bermula setelah yang terakhir selesai:

    Graf masa empat permintaan rangkaian, setiap satu bermula setelah yang terakhir selesai, meliputi keseluruhan jangka masa.

  6. Simpan, tutup dan buka semula aplikasi.

    Power Apps mendapatkan data cache, maka memilih butang sekali lagi tidak semestinya menyebabkan empat permintaan baharu. Setiap kali anda ingin menguji prestasi, tutup dan buka semula aplikasi anda. Jika anda menghidupkan pendikitan rangkaian, anda mungkin mahu mematikannya sehingga anda bersedia untuk ujian lain.

  7. Tambah kawalan Button kedua dan tetapkan sifat OnSelect kepada formula ini:

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

    Perhatikan bahawa anda menambah panggilan ClearCollect yang sama kepada butang pertama tetapi ia dibalut dalam fungsi Concurrent dan dipisahkan dengan koma pada kali ini.

  8. Kosongkan monitor rangkaian dalam pelayar.

  9. Jika anda menggunakan pendikitan rangkaian sebelum ini, hidupkan lagi.

  10. Sambil menahan kekunci Alt, pilih butang kedua dan kemudian perhatikan trafik rangkaian.

    Alat menunjukkan empat permintaan yang dilaksanakan secara serentak, serupa dengan contoh ini. Sekali lagi, masa sebenar telah dialih keluar kerana ia akan berbeza secara ketara. Grafik menunjukkan bahawa semua panggilan bermula pada masa yang sama dan tidak menunggu yang sebelumnya selesai:

    Graf masa empat permintaan rangkaian, keempat-empat bermula bersama-sama, meliputi sekitar separuh jangka masa.

    Grafik ini berdasarkan pada skala yang sama. Dengan menggunakan Concurrent, anda mengurangkan separuh jumlah masa yang diambil untuk selesaikan operasi ini.

  11. Simpan, tutup dan buka semula aplikasi.

Keadaan perlumbaan

  1. Tambah sambungan ke perkhidmatan Penterjemah Microsoft untuk aplikasi anda.

  2. Tambah kawalan Text input dan namakannya semula sebagai TextInput1 jika ia mempunyai nama yang berbeza.

  3. Tambah kawalan Button dan tetapkan sifat OnSelect pada formula 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. Tambah kawalan Data table dan tetapkan sifat Item kepada Hasil.

  5. Pada tab Sifat sebelah kanan anak tetingkap, pilih Edit medan untuk membuka anak tetingkap Medan.

  6. Dalam senarai medan, pilih kotak semak untuk setiap medan bagi menunjukkan semuanya dalam jadual data.

  7. (pilihan) Seret medan Input ke sebelah atas senarai dan seret medan FrenchFaster ke bahagian bawah senarai.

    Senarai medan dalam koleksi Hasil.

  8. Dalam kawalan Text input, taip atau tampal frasa untuk diterjemahkan.

  9. Sambil menahan butang Alt, pilih butang berbilang kali untuk mengisi jadual.

    Masa ditunjukkan dalam milisaat.

    Paparan jadual data yang mengandungi hasil menterjemahkan rentetan

    Dalam sesetengah kes, terjemahan Bahasa Perancis lebih pantas daripada terjemahan Jerman dan sebaliknya. Kedua-dua bermula pada masa yang sama tetapi satu telah kembali sebelum yang lain kerana pelbagai sebab termasuk kependaman rangkaian dan pemprosesan bahagian pelayan.

    Keadaan perlumbaan akan berlaku jika aplikasi disandarkan pada satu terjemahan yang berakhir terlebih dahulu. Mujurlah, Power Apps menandakan kebergantungan paling banyak masa yang ia boleh kesan.