2012-04-20 4 views
5

SmtpClientWrapperのMvcMailer SendAsyncメソッドがASP.NET MVCリクエストをブロックするかどうかは誰にも知られていますか? MvcMailer wikiとコードを見て、私は「はい」と答えます。MvcMailer SendAsyncはASP.NET MVCリクエストをブロックしますか?

私はまだMVCアプリで安全で真に非同期なメールを送るために、hereと思われる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またはSendを使用するかどうかは関係ありません)。

シンプルにするために、Ajaxを使用して電子メールを送信することもできますが、これはサーバー操作ではなくクライアントであるという欠点があります。

関連する問題