Tengo una acción que envía un correo electrónico simple:SmtpClient.SendAsync bloqueando mi ASP.NET MVC Solicitud
[HttpPost, ActionName("Index")]
public ActionResult IndexPost(ContactForm contactForm)
{
if (ModelState.IsValid)
{
new EmailService().SendAsync(contactForm.Email, contactForm.Name, contactForm.Subject, contactForm.Body, true);
return RedirectToAction(MVC.Contact.Success());
}
return View(contactForm);
}
Y un servicio de correo electrónico:
public void SendAsync(string fromEmail, string fromName, string subject, string body, bool isBodyHtml)
{
MailMessage mailMessage....
....
SmtpClient client = new SmtpClient(settingRepository.SmtpAddress, settingRepository.SmtpPort);
client.EnableSsl = settingRepository.SmtpSsl;
client.Credentials = new NetworkCredential(settingRepository.SmtpUserName, settingRepository.SmtpPassword);
client.SendCompleted += client_SendCompleted;
client.SendAsync(mailMessage, Tuple.Create(client, mailMessage));
}
private void client_SendCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
Tuple<SmtpClient, MailMessage> data = (Tuple<SmtpClient, MailMessage>)e.UserState;
data.Item1.Dispose();
data.Item2.Dispose();
if (e.Error != null)
{
}
}
Cuando envío un correo electrónico, yo soy usando el método Async, entonces mi método SendAsync regresa inmediatamente, luego se llama a RedirectToAction. Pero la respuesta (en este caso, una redirección) no es enviada por ASP.NET hasta que se complete client_SendCompleted.
Aquí es lo que estoy tratando de entender:
Al ver la ejecución en depurador de Visual Studio, la SendAsync devuelve inmediatamente (y RedirectToAction se llama), pero no pasa nada en el navegador hasta que se envía el correo electrónico?
Si pongo un punto de interrupción dentro de client_SendCompleted, el cliente se queda cargando ... hasta que presiono F5 en el depurador.
si uso Task.Factory.StartNew (() => SendEmail(), TaskCreationOptions.LongRunning) ¿Tendré el mismo problema? –
[¿Nunca debería llamar a HostingEnvironment.UnregisterObject?] (Http://stackoverflow.com/questions/16096378/should-i-never-call-hostingenvironment-unregisterobject) – horgh