Enviar solicitações em lote

Cada conexão HTTP que seu aplicativo faz resulta em uma determinada quantidade de sobrecarga. Essa biblioteca oferece suporte a lotes, 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ê precisa fazer muitas pequenas solicitações e quer minimizar a sobrecarga da solicitação HTTP.
  • Um usuário fez alterações nos dados enquanto seu aplicativo estava off-line. portanto, seu aplicativo precisa sincronizar seus dados locais com o servidor enviando muitas 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 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 for 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();