Aracılığıyla paylaş


Concurrent fonksiyon

Şunlar için geçerlidir: Tuval uygulamaları Model temelli uygulamalar

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

Tanım

işlevi, Concurrent bağlayıcı veya Dataverse çağrıları varsa aynı özellik içinde belirtilen birden çok formülün aynı anda değerlendirilmesini sağlar. Normalde, birden çok formül her formülü sırayla değerlendiren ; (noktalı virgül) işleciyle birbirine zincirleme bağlanarak hesaplanır. işleviyle Concurrent , uygulama ; işlecini kullandıktan sonra bile bir özellik içindeki tüm formülleri 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, uygulama verileri yüklediğinde performansı geliştirmek için kullanın Concurrent . Ö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.

İşlev içindeki Concurrent formüllerin başlangıç ve bitiş değerlendirme sırasını tahmin edebilirsiniz. İşlev içindeki Concurrent formüller aynı Concurrent işlevdeki diğer formüllere bağımlılıklar içermemelidir ve power apps denerseniz bir hata gösterir. İşlev başlamadan önce tamamlandıklarından, formüllerdeki bağımlılıkları işlevin ConcurrentConcurrent dışında güvenle alabilirsiniz. İşlevden Concurrent sonraki formüller, içindeki formüllere bağımlılıkları güvenli bir şekilde alabilir: İşlev tamamlanmadan ve zincirdeki bir sonraki formüle geçmeden önce Concurrent ( ; işlecini kullanırsanız) bunların tümü tamamlanabilir. Yan etkileri olan işlevleri veya hizmet yöntemlerini çağırıyorsanız, belirsiz sıra bağımlılıklarına dikkat edin.

Formülleri bağımsız değişken Concurrentiçindeki ; işleciyle birlikte zincirleyebilirsiniz. Örneğin, Concurrent( Set( a, 1 ); Set( b, a+1 ), Set( x, 2 ); Set( y, x+2 ) ),Set( a, 1 ); Set( b, a+1 ) aynı anda Set( x, 2 ); Set( y, x+2 ). Bu durumda, formüllerin içindeki bağımlılıklar sorun yaratmaz: ab'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. Concurrent kullanılabilir özellikleri kullanır ve tüm formüller değerlendirilene kadar tamamlanmaz.

Formül düzeyi hata yönetimini etkinleştirirseniz (gelişmiş ayarlarda), bağımsız değişken sırasında karşılaşılan ilk hata öğesinden Concurrentdöndürülür; aksi takdirde boş 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.

Yalnızca davranış formüllerinde kullanabilirsinizConcurrent.

Sözdizimi

Concurrent( 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ştiği için 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ğinizi, ancak bunların bir Concurrent işlevde sarmalandığını ve bu kez virgülle ayrıldığını unutmayın.

  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. Yine, gerçek süreler büyük ölçüde değiştiği için kaldırılmıştır. Grafik, tüm çağrıların yaklaşık aynı anda başladığını ve bir öncekinin bitmesini beklemediğini gösterir:

    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. kullanarak Concurrent, bu işlemlerin bitmek için geçen toplam süreyi yarıya indirmiş olursunuz.

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

Yarış durumu

  1. Uygulamanızda Microsoft Translator hizmetine 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ı anda başlar, ancak biri ağ gecikmesi ve sunucu tarafı işleme gibi çeşitli nedenlerle diğerinin önüne döner.

    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.