Each HTTP connection that your application makes results in a certain amount of overhead. This library supports batching, to allow your application to put several API calls into a single HTTP request. Examples of situations when you might want to use batching:
- You have many small requests to make and would like to minimize HTTP request overhead.
- A user made changes to data while your application was offline, so your application needs to synchronize its local data with the server by sending a lot of updates and deletes.
Note: You're limited to 1,000 calls in a single batch request. If you need to make more calls than that, use multiple batch requests.
Note: You cannot use a media upload object in a batch request.
Details
You create batch requests by instantiating a
BatchRequest
object and then calling the Queue
method for each request you want to execute.
With each request, pass in a callback to be called when your application receives
the response to that request.
The callback function's arguments are:
- content
- The content response, or
null
if the request failed. - error
- The error, or
null
if the request succeeded. - index
- The index of the individual request.
- message
- The full HTTP message that includes all its headers and content.
ExecuteAsync
method to make the requests.
In the following code snippet, two API requests are batched into a single HTTP request, and each API request is supplied a 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();