を遮断:SmtpClient.SendAsync私は、単純な電子メールを送信アクションを持っている私のASP.NET MVCリクエスト
[HttpPost, ActionName("Index")]
public ActionResult IndexPost(ContactForm contactForm)
{
if (ModelState.IsValid)
{
new EmailService().SendAsync(contactForm.Email, contactForm.Name, contactForm.Subject, contactForm.Body, true);
return RedirectToAction(MVC.Contact.Success());
}
return View(contactForm);
}
と電子メールサービス:
public void SendAsync(string fromEmail, string fromName, string subject, string body, bool isBodyHtml)
{
MailMessage mailMessage....
....
SmtpClient client = new SmtpClient(settingRepository.SmtpAddress, settingRepository.SmtpPort);
client.EnableSsl = settingRepository.SmtpSsl;
client.Credentials = new NetworkCredential(settingRepository.SmtpUserName, settingRepository.SmtpPassword);
client.SendCompleted += client_SendCompleted;
client.SendAsync(mailMessage, Tuple.Create(client, mailMessage));
}
private void client_SendCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
Tuple<SmtpClient, MailMessage> data = (Tuple<SmtpClient, MailMessage>)e.UserState;
data.Item1.Dispose();
data.Item2.Dispose();
if (e.Error != null)
{
}
}
私は電子メールを送信すると、私はAsyncメソッドを使用して、私のメソッドSendAsyncがすぐに戻り、次にRedirectToActionが呼び出されます。しかし、レスポンス(この場合はリダイレクト)は、client_SendCompletedが完了するまでASP.NETによって送信されません。
のVisual Studioデバッガで実行を見て、SendAsyncはすぐに(とRedirectToActionと呼ばれる)を返しますが、何もブラウザで起こらない電子メールが送信されるまで:ここ
は、私が理解しようとしている何ですか?
私がclient_SendCompletedの中にブレークポイントを置くと、クライアントはデバッガでF5を押すまでロードを続けます。
私はTask.Factory.StartNew(()=> SendEmail()、TaskCreationOptions.LongRunningを使用する場合)同じ問題がありますか? –
[私は決してHostingEnvironment.UnregisterObjectを呼び出すべきですか?](http://stackoverflow.com/questions/16096378/should-i-never-call-hostingenvironment-unregisterobject) – horgh