Enviar solicitações em lote

Cada conexão HTTP que seu aplicativo faz resulta em uma determinada quantidade de sobrecarga. Essa biblioteca oferece suporte ao agrupamento em lote, para permitir que seu aplicativo coloque várias chamadas de API em uma única solicitação HTTP. Exemplos de situações em que convém usar operações em lote:

  • Você tem muitas solicitações pequenas e quer minimizar a sobrecarga das solicitações HTTP.
  • Um usuário fez alterações nos dados enquanto o app estava off-line. Por isso, ele precisa sincronizar os dados locais com o servidor enviando várias atualizações e exclusões.

Observação: o limite é de 1.000 chamadas em uma única solicitação em lote. Se você precisar fazer mais chamadas do que isso, use várias solicitações em lote.

Observação: não é possível usar um objeto upload de mídia em uma solicitação em lote.

Detalhes

Você cria solicitações em lote instanciando BatchRequest e, em seguida, chamando o método Queue para cada solicitação que você quer executar. Com cada solicitação, transmita um callback que será chamado quando seu aplicativo receber a resposta a essa solicitação. Os argumentos da função de callback são:

conteúdo
A resposta do conteúdo, ou null se a solicitação falhou.
erro
O erro ou null se a solicitação foi bem-sucedida.
index
O índice da solicitação individual.
mensagem
A mensagem HTTP completa com todos os cabeçalhos e conteúdo.
Depois de adicionar as solicitações, chame o método ExecuteAsync para fazer as solicitações.

No snippet de código a seguir, duas solicitações de API são agrupadas em uma única solicitação HTTP, e cada solicitação de API recebe um callback:

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();