Chia sẻ qua


Concurrent chức năng

Áp dụng cho: Ứng dụng Canvas Ứng dụng dựa trên mô hình

Đánh giá nhiều công thức cùng lúc.

Description

Hàm Concurrent này cho phép nhiều công thức được chỉ định trong cùng một thuộc tính được đánh giá cùng một lúc nếu chúng có các cuộc gọi đường kết nối hoặc Dataverse. Thông thường, ứng dụng đánh giá nhiều công thức bằng cách xâu chuỗi những công thức này lại với nhau bằng toán tử ; (dấu chấm phẩy) để đánh giá từng công thức theo tuần tự. Với chức năng Concurrent này, ứng dụng sẽ đánh giá tất cả các công thức trong một thuộc tính đồng thời ngay cả sau khi sử dụng toán tử ;. Điều này đồng thời giúp người dùng chờ ít hơn cho cùng một kết quả.

Trong thuộc tính OnStart của ứng dụng, hãy sử dụng để Concurrent cải thiện hiệu suất khi ứng dụng tải dữ liệu. Khi lệnh gọi dữ liệu chỉ bắt đầu khi lệnh gọi trước hoàn tất, ứng dụng phải chờ để có được tổng số lần yêu cầu. Nếu các lệnh gọi dữ liệu bắt đầu cùng một lúc, ứng dụng chỉ cần đợi lần yêu cầu lâu nhất. Trình duyệt web thường thực hiện đồng thời các lệnh gọi mạng để cải thiện hiệu suất.

Bạn không thể dự đoán thứ tự các công thức trong đánh giá Concurrent bắt đầu và kết thúc hàm. Các công thức trong Concurrent hàm Concurrent không được chứa phụ thuộc vào các công thức khác trong cùng một hàm và Power Apps sẽ hiển thị lỗi nếu bạn thử. Từ bên trong, bạn có thể phụ thuộc một cách an toàn vào các công thức bên ngoài Concurrent hàm vì chúng hoàn thành trước khi hàm Concurrent bắt đầu. Concurrent Các công thức sau khi hàm có thể phụ thuộc một cách an toàn vào các công thức bên trong: Concurrent chúng sẽ hoàn tất trước khi hàm kết thúc và chuyển sang công thức tiếp theo trong một chuỗi (nếu bạn sử dụng toán tử ;). Hãy cảnh giác với các phần phụ thuộc nếu bạn đang gọi các chức năng hoặc phương thức dịch vụ có tác dụng phụ.

Bạn có thể chuỗi các công thức cùng với toán tử ; trong một đối số đến Concurrent. Ví dụ: Concurrent( Set( a, 1 ); Set( b, a+1 ), Set( x, 2 ); Set( y, x+2 ) ) đánhgiá Set( a, 1 ); Set( b, a+1 ) đồng thời với Set( x, 2 ); Set( y, x+2 ). Trong trường hợp này, các phần phụ thuộc trong công thức ổn: a sẽ được đặt trước bx sẽ được đặt trước y.

Tùy thuộc vào thiết bị hoặc trình duyệt mà ứng dụng đang chạy, hàm chỉ thực sự đánh giá đồng thời một số ít công thức. Concurrent dùng các khả năng sẵn có và sẽ không hoàn thành cho đến khi tất cả các công thức đã được đánh giá.

Nếu bạn bật Quản lý lỗi mức công thức (trong thiết đặt nâng cao), Concurrentlỗi đầu tiên gặp phải trong thứ tự đối số sẽ được trả về từ ; nếu không, lỗi trống sẽ được trả về. Nếu triển khai thành công tất cả các công thức, thì hàm sẽ trả về true. Nếu không thể triển khai một công thức, hàm sẽ dừng đánh giá phần còn lại của công thức này nhưng vẫn tiếp tục đánh giá các công thức khác.

Bạn chỉ có thể sử Concurrent dụng trong công thức hành vi.

Cú pháp

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

  • Công thức – Bắt buộc. Các công thức cần đánh giá đồng thời. Bạn phải thêm ít nhất hai công thức.

Ví dụ

Tải dữ liệu nhanh hơn

  1. Tạo một ứng dụng rồi thêm bốn nguồn dữ liệu từ Microsoft Dataverse, SQL Server hoặc SharePoint.

    Ví dụ này sử dụng bốn bảng từ mẫu cơ sở dữ liệu Adventure Works trên SQL Azure. Sau khi bạn tạo cơ sở dữ liệu, hãy kết nối với cơ sở dữ liệu này từ Power Apps bằng tên máy chủ đủ điều kiện (ví dụ: srvname.database.windows.net):

    Kết nối với cơ sở dữ liệu Adventure Works trong Azure.

  2. Thêm tùy chọn kiểm soát Button rồi đặt thuộc tính OnSelect thành công thức sau:

    ClearCollect( Product, '[SalesLT].[Product]' );
    ClearCollect( Customer, '[SalesLT].[Customer]' );
    ClearCollect( SalesOrderDetail, '[SalesLT].[SalesOrderDetail]' );
    ClearCollect( SalesOrderHeader, '[SalesLT].[SalesOrderHeader]' )
    
  3. Trong Microsoft Edge hoặc Google Chrome, hãy bật công cụ dành cho nhà phát triển để giám sát lưu lượng truy cập mạng khi ứng dụng của bạn đang chạy.

  4. (không bắt buộc) Bật tính năng điều chỉnh mạng để tăng cường hiệu quả của phép so sánh này.

  5. Nhấn và giữ phím Alt, đồng thời chọn nút này rồi xem lưu lượng truy cập mạng.

    Các công cụ hiển thị bốn yêu cầu được thực hiện liên tiếp, tương tự như ví dụ sau đây. Thời gian thực tế đã bị xóa vì chúng khác nhau một cách hoang dại. Biểu đồ cho thấy mỗi lệnh gọi bắt đầu sau khi lệnh gọi trước kết thúc:

    Biểu đồ thời gian của bốn yêu cầu mạng, mỗi yêu cầu bắt đầu sau khi kết thúc yêu cầu trước, bao trùm toàn bộ khoảng thời gian.

  6. Lưu, đóng rồi mở lại cấu hình.

    Power Apps lưu trữ dữ liệu trong bộ nhớ đệm. Vì vậy, khi chọn lại nút, không nhất thiết phải tạo bốn yêu cầu mới. Mỗi lần bạn muốn kiểm tra hiệu suất, hãy đóng rồi mở lại ứng dụng. Nếu đã bật tính năng điều chỉnh mạng, bạn có thể cần tắt tính năng này cho đến khi sẵn sàng thực hiện lượt kiểm tra khác.

  7. Thêm công cụ điều khiển Button (Nút) thứ hai rồi đặt thuộc tính OnSelect của nút này thành công thức sau:

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

    Lưu ý rằng lần này bạn đã thêm cùng một cuộc gọi ClearCollect vào nút đầu tiên nhưng Concurrent các cuộc gọi đó được ngắt dòng trong một chức năng và lần này được phân tách bằng dấu phẩy.

  8. Xóa màn hình mạng trong trình duyệt.

  9. Nếu trước đó, bạn đã sử dụng tính năng điều chỉnh mạng, thì hãy bật lại tính năng này.

  10. Nhấn và giữ phím Alt, đồng thời chọn nút thứ hai rồi xem lưu lượng truy cập mạng.

    Các công cụ hiển thị bốn yêu cầu được thực hiện đồng thời, tương tự như ví dụ sau đây. Một lần nữa, thời gian thực tế đã bị xóa vì chúng khác nhau một cách hoang dại. Đồ thị cho thấy rằng tất cả các cuộc gọi bắt đầu cùng một lúc và không chờ đến khi cuộc gọi trước đó kết thúc:

    Biểu đồ thời gian về bốn yêu cầu mạng, cả bốn yêu cầu đều bắt đầu cùng lúc, chiếm chừng một nửa khoảng thời gian.

    Những biểu đồ này dựa trên cùng một tỷ lệ. Bằng cách sử Concurrentdụng , bạn đã giảm một nửa tổng thời gian hoàn tất các thao tác này.

  11. Lưu, đóng rồi mở lại cấu hình.

Điều kiện Race

  1. Kết nối ứng dụng của bạn với dịch vụ Trình biên dịch của Microsoft.

  2. Thêm công cụ điều khiển Text input (Nội dung nhập văn bản) rồi đổi tên thành TextInput1 nếu công cụ này hiện có tên khác.

  3. Thêm công cụ điều khiển Button (Nút) rồi đặt thuộc tính OnSelect của nút này thành công thức sau:

    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. Thêm công cụ điều khiển Data table (Bảng dữ liệu), rồi đặt thuộc tính Items (Mục) thành Results.

  5. Trên tab Properties (Thuộc tính) ở ngăn bên phải, hãy chọn Edit fields (Chỉnh sửa trường) để mở ngăn Fields (Trường).

  6. Trong danh sách trường, hãy chọn hộp kiểm cho từng trường để hiển thị tất cả các trường đó trong bảng dữ liệu.

  7. (không bắt buộc) Kéo trường Input lên đầu danh sách và kéo trường FrenchFaster xuống cuối danh sách.

    Danh sách các trường trong bộ sưu tập Result (Kết quả).

  8. Trong công cụ điều khiển Text input (Nội dung nhập văn bản), hãy nhập hoặc dán một cụm từ cần dịch.

  9. Nhấn và giữ phím Alt, đồng thời chọn nút nhiều lần để điền vào bảng.

    Thời gian hiển thị bằng mili giây.

    Hiển thị bảng dữ liệu chứa kết quả dịch chuỗi

    Trong một số trường hợp, bản dịch tiếng Pháp nhanh hơn bản dịch tiếng Đức và ngược lại. Cả hai bắt đầu cùng một lúc, nhưng một trở lại trước khi khác vì nhiều lý do, bao gồm cả độ trễ mạng và xử lý phía máy chủ.

    Điều kiện thực hiện sẽ xảy ra nếu ứng dụng phụ thuộc vào bản dịch hoàn thành trước. Thật may, Power Apps gắn cờ hầu hết phần phụ thuộc thời gian mà hàm có thể phát hiện.