Cada conexión HTTP que realiza tu aplicación genera una cierta sobrecarga. Esta biblioteca admite el procesamiento por lotes, para permitir que tu aplicación coloque varias llamadas a la API en una sola solicitud HTTP. A continuación, se detallan algunos ejemplos de situaciones en las que te sería útil usar el procesamiento por lotes:
- Tiene muchas solicitudes pequeñas para realizar y desea minimizar la sobrecarga de solicitudes HTTP.
- Un usuario realizó cambios en los datos mientras la aplicación estaba sin conexión, por lo que esta debe sincronizar sus datos locales con el servidor mediante el envío de muchas actualizaciones y eliminaciones.
Nota: Tienes un límite de 1,000 llamadas por solicitud por lotes. Si necesitas hacer más llamadas, usa varias solicitudes por lotes.
Nota: No puedes usar un objeto de carga de contenido multimedia en una solicitud por lotes.
Detalles
Para crear solicitudes por lotes, crea una instancia de un objeto BatchRequest
y, luego, llama al método Queue
para cada solicitud que desees ejecutar.
Con cada solicitud, pasa una devolución de llamada para que se la llame cuando tu aplicación reciba la respuesta a esa solicitud.
Los argumentos de la función de devolución de llamada son los siguientes:
- contenido
- Es la respuesta del contenido o
null
si la solicitud falló. - error
- El error, o
null
si la solicitud se realizó correctamente. - index
- El índice de la solicitud individual.
- mensaje
- Es el mensaje HTTP completo que incluye todos sus encabezados y contenido.
ExecuteAsync
para realizar las solicitudes.
En el siguiente fragmento de código, dos solicitudes a la API se agrupan en una sola solicitud HTTP y cada solicitud a la API recibe una devolución de llamada:
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();