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ề những trường hợp mà bạn có thể cần sử dụng tính năng phân lô:

  • 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.
  • Một người dùng đã thực hiện thay đổi đối với dữ liệu trong khi ứng dụng của bạn không kết nối mạng, 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 rất nhiều bản cập nhật và xoá nhiều nội dung.

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 số lượng đó, hãy sử dụng nhiều yêu cầu hàng loạt.

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.

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 yêu cầu, bạn gọi hàm ExecuteAsync để tạo 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();