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