Tôi có một hành động mà sẽ gửi một email đơn giản:SmtpClient.SendAsync chặn tôi ASP.NET MVC Yêu cầu
[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);
}
Và một dịch vụ thư điện tử:
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)
{
}
}
Khi tôi gửi một email, tôi sử dụng phương thức Async, sau đó phương thức SendAsync của tôi trả về ngay lập tức, sau đó RedirectToAction được gọi. Nhưng phản hồi (trong trường hợp này là một chuyển hướng) không được gửi bởi ASP.NET cho đến khi client_SendCompleted được hoàn tất.
Dưới đây là những gì tôi đang cố gắng để hiểu:
Khi xem việc thực hiện trong Visual Studio debugger, các SendAsync trả về ngay lập tức (và RedirectToAction được gọi), nhưng không có gì xảy ra trong trình duyệt cho đến khi email được gửi?
Nếu tôi đặt một điểm ngắt bên trong client_SendCompleted, khách hàng ở tại tải .... cho đến khi tôi nhấn F5 tại trình gỡ lỗi.
nếu tôi sử dụng Task.Factory.StartNew (() => SendEmail(), TaskCreationOptions.LongRunning) Tôi sẽ có cùng một vấn đề? –
[Tôi có nên không bao giờ gọi HostingEnvironment.UnregisterObject?] (Http://stackoverflow.com/questions/16096378/should-i-never-call-hostingenvironment-unregisterobject) – horgh