C# 在分拣目录中存储电子邮件的性能是否类似于异步发送?
ASP.NET MVC 1还不支持控制器内部产生的异步线程,Futures assembly和MVC 2预览版中有一些内容,但生产级版本中没有。但是,我想异步发送电子邮件,我目前正在探索这样做的方法 一个看似简单的选项,而不是实际同步发送电子邮件,似乎是将传递方法设置为删除目录而不是发送,然后让SMTP服务器以自己的速度接收电子邮件 使用drop目录的性能与使用异步电子邮件发送类似吗?实际上有一种方法可以使用 更新: 进一步分析此场景后,在同步控制器内使用SmtpClient.SendAsync似乎会引发以下异常: 异步操作不可用 在这种情况下是允许的。起始页 异步操作必须具有 Async属性设置为true,并且 只能执行异步操作 在之前的页面上开始 预渲染完成事件 作为一种解决方法,可以生成手动线程:C# 在分拣目录中存储电子邮件的性能是否类似于异步发送?,c#,asp.net-mvc,email,C#,Asp.net Mvc,Email,ASP.NET MVC 1还不支持控制器内部产生的异步线程,Futures assembly和MVC 2预览版中有一些内容,但生产级版本中没有。但是,我想异步发送电子邮件,我目前正在探索这样做的方法 一个看似简单的选项,而不是实际同步发送电子邮件,似乎是将传递方法设置为删除目录而不是发送,然后让SMTP服务器以自己的速度接收电子邮件 使用drop目录的性能与使用异步电子邮件发送类似吗?实际上有一种方法可以使用 更新: 进一步分析此场景后,在同步控制器内使用SmtpClient.SendAsync
public ActionResult Index()
{
new Thread(() =>
{
// TODO: Add exception handling here:
var client = new SmtpClient("host");
client.Send("from", "to", "subject", "body");
}).Start();
return View();
}
正如我在问题中所述,我不能使用异步发送,因为ASP.NET MVC控制器不支持异步线程生成,这会导致SendAsync无法使用。您需要等待邮件实际发送才能呈现页面吗?我之所以提出这一点,是因为这是一个常见的火灾和遗忘行为场景。不,我不需要等待,也不想等待电子邮件发送。我只是受ASP.NET MVC框架的约束,我无法从控制器启动异步操作,因此我试图找到一种方法来解决强制同步发送的问题,或者至少获得与异步发送相当的性能。因此,SendAsync方法正是您所需要的!您只需从控制器操作调用它,然后忘记它。它只会从池中生成一个后台线程,发送邮件并返回,视图可能会在回调实际调用之前呈现很长时间。这种方法没有错。您还可以手动生成线程并调用其中的Send方法。异步控制器在有一些I/O绑定请求的情况下非常有用,并且您的视图取决于这些操作的结果文件操作、ADO.NET、web服务调用等。。。。