我不希望用户等待页面完成发送过程,所以我想在 ASP.NET 3.5 中使用 SendAsync。但是在调试之后,我发现主线程仍然在等待。
Main:调用发送邮件功能... 邮件发送:正在配置.... mailSend:设置不正确的端口.... mailSend:现在尝试发送.... 邮件发送:行尾 主要:电子邮件功能调用完成。 主要:过程完成! mailComp:发送邮件失败,将在 5 秒后重试... mailComp:正在重试... mailComp:发送成功! mailComp:行尾
现在我设置了错误的端口设置,所以第一封邮件失败,并测试第二次是否会成功。即使使用正确的端口,页面仍然在等待。只有在 mailComp 函数完成后,页面才会最终发布。这是对 SendAsyn 的一些限制吗?
这里有一些代码,不确定这是否有帮助。
protected void btnReset_Click(对象发送者,EventArgs e) { 尝试 { DataContext db = new DataContext(); var query = 来自 db.Fish 中的 u 其中 u.Username == txtUsername.Text & u.Email == txtEmail.Text 选择新的 { u.Username, u.Email }; if (query.Count() != 0) { 用户用户 = 新用户(); 字符串令牌 = user.requestPasswordReset(txtUsername.Text); 字符串 URL = Request.Url.AbsoluteUri.ToString() + "?token=" + token; String body = "如果您\n" + URL + "\n \n "则重置您的密码; untilty.SendEmail(txtEmail.Text, "重设密码", body); litTitle.Text = "消息已发送!"; litInfo.Text = "请在几分钟后查看您的电子邮件以获取进一步说明。"; 视图模式(假,假); } 别的 { litCannotFindUserWithEmail.Visible = true; } } 捕捉(例外前) { Debug.Write("主要:异常:" + ex.ToString()); litInfo.Text = "我们目前遇到了一些技术上的困难。请稍后再试。如果您仍有问题,请致电 905344525"; } } /// 公共静态类实用程序 /// 公共静态无效发送电子邮件(字符串收件人,字符串主题,字符串正文) { MailMessage 消息 = 新的 MailMessage(); message.To.Add(new MailAddress(recipient)); message.From = new MailAddress(fromaddress, "Basadur Profile Website"); message.Subject = 主题; 消息.正文 = 正文; 发信息); } 私人静态无效发送(MailMessage 消息) { SmtpClient smtp = new SmtpClient(); smtp.Host = "smtp.gmail.com"; smtp.Credentials = new System.Net.NetworkCredential(fromaddress, mailpassword); smtp.EnableSsl = true; Debug.WriteLine("mailSend: 设置了错误的端口...."); smtp.端口 = 5872; //错误的端口 smtp.SendCompleted += new SendCompletedEventHandler(smtp_SendCompleted); smtp.SendAsync(味精,味精); } 静态无效 smtp_SendCompleted(对象发送者,System.ComponentModel.AsyncCompletedEventArgs e) { var msg = (MailMessage)e.UserState; 如果(例如错误!= null) { System.Threading.Thread.Sleep(1000 * 5); 尝试 { SmtpClient smtp = new SmtpClient(); smtp.Host = "smtp.gmail.com"; smtp.Credentials = new System.Net.NetworkCredential(fromaddress, mailpassword); smtp.EnableSsl = true; smtp.端口 = 587; smtp.Send(msg); } 捕捉(例外前) { Debug.WriteLine("mailComp: 第二次放弃失败。"); } } }