2012-04-20 104 views
5

有誰知道SmtpClientWrapper中的MvcMailer SendAsync方法是否阻止ASP.NET MVC請求?看着MvcMailer維基和代碼,我會說是的。MvcMailer SendAsync是否阻止ASP.NET MVC請求?

所以我仍然需要使用像WebBackgrounder這樣的東西作爲一個安全和真正的異步郵件發送在我的MVC應用程序中發送here

我正在尋找一個明確的答案謝謝。

+0

這將是奇怪的,如果異步調用將阻止請求線程.. – 2012-04-20 16:35:09

+0

我正在專門討論阻止一個ASP.NET請求,討論stackoverflow.com/questions/6935427/...。鑑於MvcMailer是一個MVC應用程序,我希望該項目解決了這個問題。看看代碼,我會說它沒有。 – DalSoft 2012-04-20 17:02:23

回答

5

下載MvcMailer並運行我自己的測試後,我可以確認SendAsync確實會阻止ASP.NET請求,直到完成。

微軟證實了這一行爲https://connect.microsoft.com/VisualStudio/feedback/details/688210/smtpclient-sendasync-blocking-my-asp-net-mvc-request

「SendAsync()調用SynchronizationContext.OperationStarted(),這是一個提示,不要將其HttpContext實例的(甚至正在進行的請求),直到異步操作完成。」

由於MvcMailer只是從System.Net.Mail包裝SendAsync,它受到相同的限制。

異步發送電子郵件的正確方法是使用WebBackgrounder之類的東西,因爲它完全是後臺操作(因此,如果使用SendAsync或Send,則無關緊要)。

爲了簡單起見,您還可以使用Ajax發送電子郵件,但這有一個客戶端而不是服務器操作的缺點。