Cada conexión HTTP que realiza tu aplicación da como resultado una cierta cantidad de 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:
- Tienes que realizar muchas solicitudes pequeñas y te gustaría minimizar la sobrecarga de las 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
Puedes crear solicitudes por lotes con la creación de una instancia
BatchRequest
y, luego, llama al método Queue
para cada solicitud que quieras ejecutar.
Con cada solicitud, pasa una devolución de llamada para que se la llame cuando la 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
- El índice de la solicitud individual.
- mensaje
- Es el mensaje HTTP completo que incluye todo su contenido y encabezados.
ExecuteAsync
para realizar las solicitudes
En el siguiente fragmento de código, dos solicitudes a la API se agrupan en lotes 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();