Gửi yêu cầu hàng loạt

Mỗi kết nối HTTP mà ứng dụng của bạn tạo ra đều dẫn đến một mức hao tổn nhất định. Thư viện này hỗ trợ việc phân lô, để cho phép ứng dụng của bạn đặt nhiều lệnh gọi API vào một yêu cầu HTTP duy nhất. Ví dụ về các trường hợp bạn nên sử dụng tính năng xử lý hàng loạt:

  • Bạn cần thực hiện nhiều yêu cầu nhỏ và muốn giảm thiểu hao tổn yêu cầu HTTP.
  • Người dùng đã thay đổi dữ liệu trong khi ứng dụng của bạn đang ở chế độ ngoại tuyến, vì vậy, ứng dụng của bạn cần đồng bộ hoá dữ liệu cục bộ với máy chủ bằng cách gửi nhiều nội dung cập nhật và xoá.

Lưu ý: Mỗi yêu cầu theo lô chỉ được có tối đa 1.000 lệnh gọi. Nếu bạn cần thực hiện nhiều lệnh gọi hơn, hãy sử dụng nhiều yêu cầu theo lô.

Lưu ý: Bạn không thể sử dụng tải nội dung nghe nhìn lên trong một yêu cầu hàng loạt.

Thông tin chi tiết

Bạn tạo yêu cầu hàng loạt bằng cách tạo thực thể một BatchRequest rồi gọi phương thức Queue cho mỗi yêu cầu mà bạn muốn thực thi. Với mỗi yêu cầu, hãy truyền một lệnh gọi lại để gọi khi ứng dụng của bạn nhận được nội dung phản hồi cho yêu cầu đó. Các đối số của hàm callback là:

nội dung
Phản hồi nội dung hoặc null nếu yêu cầu không thành công.
error
Lỗi hoặc null nếu yêu cầu thành công.
index
Chỉ mục của yêu cầu riêng lẻ.
tin nhắn
Thông báo HTTP đầy đủ bao gồm tất cả tiêu đề và nội dung.
Sau khi thêm các yêu cầu, bạn gọi phương thức ExecuteAsync để thực hiện các yêu cầu đó.

Trong đoạn mã sau, hai yêu cầu API được phân thành một yêu cầu HTTP duy nhất, và mỗi yêu cầu API được cung cấp một lệnh gọi lại:

UserCredential credential;
using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read))
{
    credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
        GoogleClientSecrets.Load(stream).Secrets,
        new[] { CalendarService.Scope.Calendar },
        "user", CancellationToken.None, new FileDataStore("Calendar.Sample.Store"));
}

// Create the service.
var service = new CalendarService(new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
        ApplicationName = "Google Calendar API Sample",
    });

// Create a batch request.
var request = new BatchRequest(service);
request.Queue<CalendarList>(service.CalendarList.List(),
     (content, error, i, message) =>
     {
         // Put your callback code here.
     });
request.Queue<Event>(service.Events.Insert(
     new Event
     {
         Summary = "Learn how to execute a batch request",
         Start = new EventDateTime() { DateTime = new DateTime(2014, 1, 1, 10, 0, 0) },
         End = new EventDateTime() { DateTime = new DateTime(2014, 1, 1, 12, 0, 0) }
     }, "YOUR_CALENDAR_ID_HERE"),
     (content, error, i, message) =>
     {
         // Put your callback code here.
     });
// You can add more Queue calls here.

// Execute the batch request, which includes the 2 requests above.
await request.ExecuteAsync();