繁体   English   中英

.NET 在不等待新线程响应的情况下发送多封邮件更好

[英].NET what is better for send multiply mails without waiting for response with new thread

我正在尝试在后台进程中发送邮件,因此用户不会等待发送结束。 SendMailFunc 创建 smtp 并调用 mail.SendMail() 以实际发送邮件。 model 保存我需要使用的数据,并且 mailContent 是我呈现以插入邮件内容的视图。

我在用着:

 System.Threading.Tasks.Task.Run(() => Helpers.Functions.SendMailFunc(model, mailContent));

用户按下按钮发送邮件并保存状态,如果保存成功,我希望他在不等待发送邮件的情况下收到消息。

如果我发送一封邮件,这项工作正常,但我的用户可以 select 乘以 object 来更新他们的状态,并且需要为每个 object 发送特定邮件。

完整的代码是:

foreach (var obj in objects)
{
   obj.Status = "Accepted";
}

bool success = false;
success = SaveNewObjectsStatusToDb(objects);

foreach (var obj in objects)
{
   var model = new Models.EmailModel();
   model.Obj = obj ;
   model.Status = "Accepted";
   string mailContent = Helpers.Functions.GetView("statusChanged.cshtml", model);
   System.Threading.Tasks.Task.Run(() => Helpers.Functions.SendMailOrderStatusChanged(model, mailContent));
 }
      
if(success){
   return true;
}
else{
   return false;
}

我不确定什么更好 - 为我需要发送的每封邮件创建新线程或收集我需要的所有信息到 MODEL 并仅创建 1 个线程来发送每个 object 的所有邮件。

关于我想要得到的东西,我有几个问题:

  1. 在什么情况下性能会更好,我应该使用什么逻辑? 如果有任何其他解决方案可以在后台进程中发送邮件而不让用户等待它完成,我会很高兴听到它。

  2. 如果我正在创建一个线程并循环其中的所有邮件,那么使用 SendMailAsync() 会更好吗?

  3. 我可以在新线程中渲染视图吗? 现在我需要再次循环对象以创建和呈现邮件内容的视图。 如果我尝试在新线程中执行此操作,我会收到错误消息,因为我没有渲染视图的上下文。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM