2012-04-20 3 views
5

SmtpClientWrapper의 MvcMailer SendAsync 메서드가 ASP.NET MVC 요청을 차단하는지 아는 사람 있습니까? MvcMailer 위키와 코드를 보면 나는 '예'라고 대답 할 것입니다.MvcMailer SendAsync가 ASP.NET MVC 요청을 차단합니까?

그래서 아직 내 MVC 앱에서 안전하고 진정으로 비동기적인 메일을 보내려면 here으로 disused 된 WebBackgrounder와 같은 것을 사용해야할까요?

나는 정확한 대답 감사를 찾고 있습니다.

+0

비동기 호출이 요청 스레드를 차단할 경우 이상하게 보일 수 있습니다. –

+0

stackoverflow.com/questions/6935427/...에서 설명한대로 ASP.NET 요청을 차단하는 것에 대해 구체적으로 말합니다. MvcMailer가 MVC 응용 프로그램이라는 것을 감안할 때이 프로젝트가이 문제를 해결하기를 희망했습니다. 코드를 보면 나는 그렇지 않다는 것을 말할 것입니다. – DalSoft

답변

5

MvcMailer를 다운로드하고 자체 테스트를 실행 한 후 SendAsync가 완료 될 때까지 ASP.NET 요청을 차단하는지 확인할 수 있습니다.

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

이 동작 확인 "가 SendAsync()는 비동기 작업이 완료 될 때까지 (요청을 진행 짝수 또는)을 HttpContext를 예를 버리지 할 수있는 큐입니다 SynchronizationContext.OperationStarted()를 호출합니다."

MvcMailer가 System.Net.Mail에서 SendAsync를 래핑하기 때문에 동일한 제한이 있습니다.

전자 메일을 비동기 적으로 보내는 올바른 방법은 WebBackgrounder와 같은 것을 사용하는 것입니다. 그러면 완전히 백그라운드 작업이므로 SendAsync 또는 보내기를 사용하면 문제가되지 않습니다.

간단하게하기 위해 Ajax를 사용하여 전자 메일을 보낼 수도 있지만 이는 서버 작업이 아닌 클라이언트라는 단점이 있습니다.

관련 문제