2012-04-20 3 views
5

Có ai biết liệu phương pháp MvcMailer SendAsync trong SmtpClientWrapper có chặn một yêu cầu ASP.NET MVC không? Nhìn vào wiki MvcMailer và mã tôi sẽ nói có.Liệu MvcMailer SendAsync có chặn một yêu cầu ASP.NET MVC không?

Vì vậy, tôi vẫn sẽ cần phải sử dụng một cái gì đó như WebBackgrounder như disussed here cho một thư an toàn và thực sự không đồng bộ gửi trong ứng dụng MVC của tôi?

Tôi đang tìm câu trả lời cuối cùng.

+0

sẽ thật lạ nếu cuộc gọi Async sẽ chặn chuỗi yêu cầu. –

+0

Tôi đang nói cụ thể về việc chặn yêu cầu ASP.NET như được thảo luận trong stackoverflow.com/questions/6935427/…. Với MvcMailer là một ứng dụng MVC, tôi đã hy vọng dự án đã giải quyết vấn đề này. Nhìn vào mã tôi sẽ nói nó đã không. – DalSoft

Trả lời

5

Sau khi tải xuống MvcMailer và chạy thử nghiệm của riêng tôi, tôi có thể xác nhận rằng SendAsync không chặn yêu cầu ASP.NET cho đến khi hoàn thành.

Microsoft xác nhận hành vi này https://connect.microsoft.com/VisualStudio/feedback/details/688210/smtpclient-sendasync-blocking-my-asp-net-mvc-request

"SendAsync() gọi SynchronizationContext.OperationStarted(), mà là một gợi ý để không xử lý các trường hợp HttpContext (hoặc thậm chí tiến bộ theo yêu cầu) cho đến khi hoạt động không đồng bộ đã hoàn thành."

Vì MvcMailer chỉ kết thúc tốt đẹp SendAsync từ System.Net.Mail nó bị hạn chế tương tự.

Cách chính xác để gửi email không đồng bộ là sử dụng một cái gì đó như WebBackgrounder, vì vậy nó là một hoạt động nền hoàn toàn (vì vậy không quan trọng nếu bạn sử dụng SendAsync hoặc Send).

Để giữ cho mọi thứ đơn giản, bạn cũng có thể sử dụng Ajax để gửi email, nhưng điều này có bất lợi khi trở thành khách hàng thay vì hoạt động của máy chủ.