Concurrent işlevi

Şunlar için geçerlidir: Tuval uygulamaları Model yönetimli uygulamalar

Birden çok formülü bir başka formülle eşzamanlı olarak değerlendirir.

Tanım

Concurrent işlev, aynı özellik içinde belirtilen birden çok formülün bağlayıcı ya da Dataverse çağrıları varsa aynı anda değerlendirilmelerine izin verir. Normalde, birden çok formül her formülü sırayla değerlendiren ; (noktalı virgül) işleciyle birbirine zincirleme bağlanarak hesaplanır. Concurrent işleviyle uygulama, bir özellik içindeki tüm formülleri ; işleci kullandıktan sonra bile eşzamanlı olarak değerlendirir. Bu eşzamanlılık, kullanıcıların aynı sonuç için daha az beklemesine yardımcı olur.

Uygulamanızın OnStart özelliğinde, uygulamanın verileri yükleme performansını geliştirmek için Concurrent işlevini kullanın. Önceki çağrılar bitmeden yeni veri çağrıları başlamadığında, uygulamanın tüm istek sürelerinin toplamı kadar beklemesi gerekir. Veri çağrıları aynı anda başlarsa, uygulamanın yalnızca en uzun istek süresi kadar beklemesi gerekir. Web tarayıcıları çoğunlukla ağ çağrılarını eşzamanlı gerçekleştirerek performansı geliştirir.

Concurrent işlevi içindeki formülleri hesaplama işleminin hangi sırayla başlatılacağını ve bitirileceğini tahmin edemezsiniz. Concurrent işlevi içindeki formüller, aynı Concurrent işlevi içindeki diğer formüllere bağımlılık içermemelidir; böyle formüller kullanmayı denerseniz Power Apps hata gösterir. Formüllerdeki bağımlılıkları buradan güvenli bir şekilde Concurrent işlevinin dışına alabilirsiniz çünkü bunlar Concurrent işlevi başlatılmadan önce tamamlanacaktır. Concurrent işlevinden sonraki formüller, formüllerdeki bağımlılıkları güvenle içine alabilir: bunların tümü Concurrent işlevi bitmeden önce tamamlanır ve zincirde bir sonraki formüle geçilir (; işlecini kullandıysanız). Yan etkileri olan işlevleri veya hizmet yöntemlerini çağırıyorsanız, belirsiz sıra bağımlılıklarına dikkat edin.

Concurrent işlevine yönelik bir bağımsız değişkenin içinde formülleri ; işleciyle birbirine zincirleme bağlayabilirsiniz. Örneğin, Concurrent( Set( a, 1 ); Set( b, a+1 ), Set( x, 2 ); Set( y, x+2 ) ) işlevinde Set( a, 1 ); Set( b, a+1 ) formülü Set( x, 2 ); Set( y, x+2 ) ile eşzamanlı olarak hesaplanır. Bu durumda, formüllerin içindeki bağımlılıklar sorun yaratmaz: a b'den önce ve x de y'den önce ayarlanacaktır.

Uygulamanın çalıştırıldığı cihaz veya tarayıcıya bağlı olarak, aslında yalnızca birkaç formül eşzamanlı olarak hesaplanabilir. Eşzamanlı kullanılabilir özellikleri kullanır ve tüm formüller değerlendirilene kadar tamamlanmaz.

Formül düzeyinde hata yönetimini etkinleştirirseniz (gelişmiş ayarlarda), Concurrent işlevinden bağımsız değişken sırasında karşılaşılan ilk hata döndürülür; aksi takdirde boşluk döndürülür. Tüm formüller başarılı olursa, true döndürülür. Formüllerden biri başarısız olursa, formülün kalan bölümü durdurulur ve diğer formüllerin hesaplanmasına devam edilir.

Concurrent işlevini yalnızca davranış formüllerinde kullanabilirsiniz.

Sözdizimi

Eşzamanlı( Formül1,Formül2 [, ...] )

  • Formüller – Gerekli. Eşzamanlı olarak hesaplanacak formüller. En az iki formül sağlamalısınız.

Örnekler

Verileri daha hızlı yükleme

  1. Bir uygulama oluşturun ve Microsoft Dataverse, SQL Server veya SharePoint'dan dört veri kaynağı ekleyin.

    Bu örnekte SQL Azure üzerinde örnek Adventure Works veritabanından dört tablo kullanılır. Veritabanını oluşturduktan sonra, tam sunucu adını (örneğin srvname.database.windows.net) kullanarak Power Apps'ten bu veritabanına bağlanın:

    Azure'da Adventure Works veritabanına bağlanma.

  2. Button denetimi ekleyin ve OnSelect özelliğini şu formül olarak ayarlayın:

    ClearCollect( Product, '[SalesLT].[Product]' );
    ClearCollect( Customer, '[SalesLT].[Customer]' );
    ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' );
    ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' )
    
  3. Microsoft Edge'de veya Google Chrome'da, uygulamanız çalıştırılırken ağ trafiğini izlemek için geliştirici araçlarını açın.

  4. (isteğe bağlı) Bu karşılaştırmanın etkilerini artırmak için ağ kapasitesi azaltma özelliğini açın.

  5. Alt tuşunu basılı tutarak düğmeyi seçin ve ardından ağ trafiğine bakın.

    Araçlar bu örnektekine benzer biçimde seri halinde gerçekleştirilen dört istek gösterir. Gerçek süreler büyük ölçüde değişiklik göstereceğinden kaldırılmıştır. Grafikte her çağrının, son çağrı bittikten sonra başlatıldığı gösterilir:

    Her biri önceki bittikten sonra başlatılan dört ağ isteğinin, sürenin tamamını kapsayan süre grafiği.

  6. Uygulamayı kaydedin, kapatın ve yeniden açın.

    Power Apps verileri önbelleğe aldığından, düğmenin yeniden seçilmesi dört yeni isteğe neden olmaz. Performansı test etmek istediğinizde her zaman uygulamanızı kapatabilir ve yeniden açabilirsiniz. Ağ kapasitesi azaltma özelliğini açtıysanız, başka bir teste hazır olana kadar bunu kapatmak isteyebilirsiniz.

  7. İkinci bir Button denetimi ekleyin ve OnSelect özelliğini bu formüle ayarlayın:

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

    İlk düğmeye aynı ClearCollect çağrılarını eklediğinize ama bunların Concurrent işlevi içine alındığına ve bu sefer virgülle ayrıldığına dikkat edin.

  8. Tarayıcıda ağ izleyicisini temizleyin.

  9. Daha önce ağ kapasitesi azaltmayı kullandıysanız, yeniden açın.

  10. Alt tuşunu basılı tutarak ikinci düğmeyi seçin ve ardından ağ trafiğine bakın.

    Araçlar bu örnektekine benzer biçimde eşzamanlı gerçekleştirilen dört isteği gösterir. Bir kez daha, gerçek süreler büyük ölçüde değişiklik göstereceğinden kaldırılmıştır. Grafik, tüm aramaların yaklaşık aynı zamanda başladığını ve öncekinin bitmesinin beklenmediğini göstemektedir:

    Dört ağ isteğinin süre grafiği; dördü de birlikte başlatılıyor ve sürenin yaklaşık yarısını kaplıyor.

    Bu grafiklerde aynı ölçek temel alınmıştır. Concurrent işlevini kullanarak, bu işlemlerin bitmesi için gereken toplam süreyi yarıya indirdiniz.

  11. Uygulamayı kaydedin, kapatın ve yeniden açın.

Yarış durumu

  1. Uygulamanıza Translator Microsoft hizmetine bir bağlantı ekleyin.

  2. Text input denetimi ekleyin ve farklı bir adı varsa TextInput1 olarak yeniden adlandırın.

  3. Button denetimi ekleyin ve OnSelect özelliğini şu formül olarak ayarlayın:

    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 denetimi ekleyin ve Items özelliğini Sonuçlar olarak ayarlayın.

  5. Alanlar bölmesini açmak için sağ bölmenin Özellikler sekmesinde Alanları düzenle'yi seçin.

  6. Alan listesinde, tümünü veri tablosunda görüntülemek için her alanın onay kutusunu seçin.

  7. (isteğe bağlı) Giriş alanını listenin başına sürükleyin ve FrenchFaster alanını da listenin sonuna sürükleyin.

    Sonuç koleksiyonundaki alanların listesi.

  8. Text input denetiminde, çevrilecek bir tümcecik yazın veya yapıştırın.

  9. Alt tuşunu basılı tutun ve düğmeyi birkaç kez seçerek tabloyu doldurun.

    Süreler milisaniye cinsinden gösterilir.

    Bazı durumlarda, Fransızca çeviri Almanca çeviriden daha hızlıdır ve bazen de tersi olur. Her ikisi de aynı zamanda başlatılır ama ağ gecikme süresi ve sunucu tarafı işlemesi gibi çeşitli nedenlerle biri diğerinden daha önce döndürülür.

    Uygulama ilk tamamlanan çeviriye bağımlıysa, bir yarış durumu ortaya çıkabilir. Neyse ki, Power Apps algılayabildiği zamanlama bağımlılıklarının çoğunu bayrakla işaretler.