Cada conexión HTTP que realiza tu aplicación genera una cierta cantidad de sobrecarga. Esta biblioteca admite el procesamiento por lotes, lo que permite 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:
- Tienes muchas solicitudes pequeñas y deseas minimizar la sobrecarga de solicitudes HTTP.
- Un usuario realizó cambios en datos mientras la aplicación estaba sin conexión. por lo que tu app necesita sincronizar sus datos locales con el servidor con muchas actualizaciones y eliminaciones.
Nota: Hay un límite de 1,000 llamadas en una sola solicitud por lotes. Si necesitas hacer más llamadas, usa varias solicitudes por lotes.
Nota: No puedes usar un carga de contenido multimedia objeto de 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 a la que se llamará 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
- La respuesta de contenido, o
null
si la solicitud falló. - error
- El error o
null
si la solicitud se realizó correctamente. - index
- Es el índice de la solicitud individual.
- mensaje
- 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 a cada solicitud a la API se le proporciona 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();