public async Task <IActionResult> Send([FromForm] SendEmailRequest request, [FromServices] IGoogleAuthProvider auth) { if (!ModelState.IsValid) { return(View("Index", new List <Destination>(_emailsService.Get()))); } var credentials = await auth.GetCredentialAsync().ConfigureAwait(false); var gmailService = new GmailService(new BaseClientService.Initializer { HttpClientInitializer = credentials, ApplicationName = "EmailSender" }); var destinations = _emailsService.Get(); int sections = (destinations.Count / 5) + 1; var tasks = new List <Task>(5); for (int i = 0; i < sections; i++) { var currFive = destinations.Skip(i * 5).Take(5); tasks.Clear(); foreach (var destination in currFive) { string body = request.Template.Replace("{0}", destination.Name); var message = new Message { Raw = EmailMessageCreator.Message(destination.Name, destination.Email, request.Subject, body) }; var compose = new UsersResource.MessagesResource.SendRequest(gmailService, message, "me"); tasks.Add(compose.ExecuteAsync()); } await Task.WhenAny(tasks).ConfigureAwait(false); await Task.Delay(1000).ConfigureAwait(false); } _emailsService.RemoveAll(); return(Redirect("/")); }