2012-04-20 13 views
5

Qualcuno sa se il metodo SendAsync di MvcMailer in SmtpClientWrapper blocca una richiesta MVC ASP.NET? Guardando il wiki di MvcMailer e il codice direi di si.MvcMailer SendAsync blocca una richiesta MVC ASP.NET?

Quindi avrei ancora bisogno di utilizzare qualcosa come WebBackgrounder come here disussato per un invio di posta sicuro e veramente asincrono nella mia app MVC?

Sto cercando una risposta definitiva grazie.

+0

Sarebbe strano se la chiamata asincrona bloccherebbe il thread di richiesta .. –

+0

Sto specificatamente parlando di bloccare una richiesta ASP.NET come discusso in stackoverflow.com/questions/6935427/.... Dato che MvcMailer è un'app MVC, speravo che il progetto risolvesse questo problema. Guardando il codice direi che non è così. – DalSoft

risposta

5

Dopo aver scaricato MvcMailer ed eseguito i miei test, posso confermare che SendAsync blocca una richiesta ASP.NET fino al completamento.

Microsoft conferma questo comportamento https://connect.microsoft.com/VisualStudio/feedback/details/688210/smtpclient-sendasync-blocking-my-asp-net-mvc-request

"SendAsync() chiama SynchronizationContext.OperationStarted(), che è un segnale di non disporre dell'istanza HttpContext (o anche avanzare la richiesta) finché l'operazione asincrona è stata completata."

Poiché MvcMailer esegue semplicemente il wrapping di SendAsync da System.Net.Mail, presenta gli stessi limiti.

Il modo corretto di inviare e-mail in modo asincrono è utilizzare qualcosa come WebBackgrounder, in quanto è un'operazione totalmente in background (quindi non importa se si utilizza SendAsync o Send).

Per semplificare le cose, è possibile utilizzare Ajax per inviare l'e-mail, ma questo ha lo svantaggio di essere un client piuttosto che un'operazione del server.

Problemi correlati