SmtpClientWrapper の MvcMailer SendAsync メソッドが ASP.NET MVC 要求をブロックするかどうかは誰にもわかりませんか? MvcMailer wiki とコードを見ると、私はそう言うでしょう。
したがって、MVC アプリで安全で真に非同期のメールを送信するには、ここで説明されている WebBackgrounder のようなものを使用する必要がありますか?
私は決定的な答えを探しています。
SmtpClientWrapper の MvcMailer SendAsync メソッドが ASP.NET MVC 要求をブロックするかどうかは誰にもわかりませんか? MvcMailer wiki とコードを見ると、私はそう言うでしょう。
したがって、MVC アプリで安全で真に非同期のメールを送信するには、ここで説明されている WebBackgrounder のようなものを使用する必要がありますか?
私は決定的な答えを探しています。
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 を使用して電子メールを送信することもできますが、これにはサーバー操作ではなくクライアントになるという欠点があります。