2012-04-20 14 views
5

¿Alguien sabe si el método MvcMailer SendAsync en SmtpClientWrapper bloquea una solicitud MVC de ASP.NET? Al mirar el wiki de MvcMailer y el código, diría que sí.¿MvcMailer SendAsync bloquea una solicitud ASP.NET MVC?

Entonces, ¿todavía tendría que utilizar algo como WebBackgrounder como disussed here para un envío de correo seguro y verdaderamente asíncrono en mi aplicación MVC?

Estoy buscando una respuesta definitiva gracias.

+0

sería extraño si la llamada Async bloqueará el hilo de solicitud. –

+0

Estoy hablando específicamente de bloquear una solicitud ASP.NET como se discutió en stackoverflow.com/questions/6935427/.... Dado que MvcMailer es una aplicación de MVC, esperaba que el proyecto lo resolviera. Al mirar el código, diría que no. – DalSoft

Respuesta

5

Después de descargar MvcMailer y ejecutar mis propias pruebas, puedo confirmar que SendAsync bloquea una solicitud de ASP.NET hasta que se complete.

Microsoft confirma este comportamiento https://connect.microsoft.com/VisualStudio/feedback/details/688210/smtpclient-sendasync-blocking-my-asp-net-mvc-request

"SendAsync() llama SynchronizationContext.OperationStarted(), que es una señal para que se deshaga de la instancia HttpContext (o incluso progresar la solicitud) hasta que se ha completado la operación asincrónica."

Como MvcMailer simplemente se envuelve SendAsync desde System.Net.Mail sufre de las mismas limitaciones.

La forma correcta de enviar correo electrónico de forma asincrónica es utilizar algo como WebBackgrounder, ya que se trata de una operación totalmente en segundo plano (por lo que no importa si usa SendAsync o Send).

Para simplificar, también puede utilizar Ajax para enviar el correo electrónico, pero esto tiene la desventaja de ser un cliente en lugar de una operación del servidor.

Cuestiones relacionadas