问题描述
我有一个 MVC .net framerowrk 4.5.2 站点,我想从我的数据库向 4000 多个收件人发送批量消息。因此,我开发了这种异步方法,以便用户继续使用该站点。几分钟后,我收到此错误 smtp.Send(mailMessage) 方法中的“线程正在被中止”,因此该过程将终止而不向所有收件人发送邮件消息。 这是我开发功能的方式
//首先是post方法
[HttpPost] [验证输入(假)] public ActionResult Index(SendEmailModel sendEmail,string CategoryID,string TemplateID) { var mailList = new List(); //这里有一些代码 进程 p = new Process(); p.Processstart = DateTime.Now; p.LogText = "进行中"; db.Process.Add(p); db.SaveChanges();
if (ModelState.IsValid)
{
Task t = sendBulkMessages(mailList,sendEmail,path,unsubscribeUrl,p.ID,templatePath,TemplateID);
ViewBag.Result = "Η διαδικασία ξεκίνησε,μεταβείτε στην ενότητα \"Αποστολές\" για να δείτε σε τι κατάσταση είναι";
}
//some code here
return View();
}
//调用的异步方法 公共异步任务 sendBulkMessages(List emailcollection,SendEmailModel sendEmail,string uploadpath,string unsubscribeUrl,int processID,string templatePath,string TemplateID) { 等待 Task.Run(() => {
string lastmail = "";
try
{
//some code here
string Port = ConfigurationManager.AppSettings["Port"].ToString();
MailMessage mailMessage = new MailMessage();
mailMessage.From = new MailAddress(FormEmailId);
mailMessage.To.Add(new MailAddress(emailTo));
mailMessage.Subject = sendEmail.subject;
mailMessage.IsBodyHtml = true;
if (sendEmail.file[0] != null)
{
DirectoryInfo d = new DirectoryInfo(Server.MapPath(uploadpath));
foreach (var file in d.GetFiles("*.*"))
{
mailMessage.Attachments.Add(new Attachment(file.FullName));
}
}
mailMessage.AlternateViews.Add(view);
//mailMessage.Body = body;
SmtpClient smtp = new SmtpClient();
smtp.Host = HostAddress;
smtp.EnableSsl = true;
NetworkCredential networkCredential = new NetworkCredential();
networkCredential.UserName = mailMessage.From.Address;
networkCredential.Password = Password;
smtp.UseDefaultCredentials = true;
smtp.Credentials = networkCredential;
smtp.Port = Convert.ToInt32(Port);
try
{
smtp.Send(mailMessage);
Status f = new Status();
f.Email = emailTo;
f.StatusDatetime = DateTime.Now;
f.Message = "OK";
f.Statusflag = 1;
f.ProcessID = processID;
db.Status.Add(f);
db.SaveChanges();
}
catch (Exception ex)
{
Status f = new Status();
f.Email = emailTo;
f.StatusDatetime = DateTime.Now;
f.Message = ex.Message + "\n" + ex.StackTrace;
f.Statusflag = 2;
f.ProcessID = processID;
db.Status.Add(f);
db.SaveChanges();
}
}
Process p = db.Process.Find(processID);
p.ProcessEnd = DateTime.Now;
p.LogText = "Successfull process";
db.Entry(p).State = EntityState.Modified;
db.SaveChanges();
}
catch (Exception ex)
{
Process p = db.Process.Find(processID);
p.ProcessEnd = DateTime.Now;
p.LogText = "Mail: " + lastmail + "\nProcess ended with failure\n" + ex.Message + "\n" + ex.StackTrace;
db.Entry(p).State = EntityState.Modified;
db.SaveChanges();
}
});
}
有什么想法可以避免中止线程吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)