Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在分拣目录中存储电子邮件的性能是否类似于异步发送?_C#_Asp.net Mvc_Email - Fatal编程技术网

C# 在分拣目录中存储电子邮件的性能是否类似于异步发送?

C# 在分拣目录中存储电子邮件的性能是否类似于异步发送?,c#,asp.net-mvc,email,C#,Asp.net Mvc,Email,ASP.NET MVC 1还不支持控制器内部产生的异步线程,Futures assembly和MVC 2预览版中有一些内容,但生产级版本中没有。但是,我想异步发送电子邮件,我目前正在探索这样做的方法 一个看似简单的选项,而不是实际同步发送电子邮件,似乎是将传递方法设置为删除目录而不是发送,然后让SMTP服务器以自己的速度接收电子邮件 使用drop目录的性能与使用异步电子邮件发送类似吗?实际上有一种方法可以使用 更新: 进一步分析此场景后,在同步控制器内使用SmtpClient.SendAsync

ASP.NET MVC 1还不支持控制器内部产生的异步线程,Futures assembly和MVC 2预览版中有一些内容,但生产级版本中没有。但是,我想异步发送电子邮件,我目前正在探索这样做的方法

一个看似简单的选项,而不是实际同步发送电子邮件,似乎是将传递方法设置为删除目录而不是发送,然后让SMTP服务器以自己的速度接收电子邮件

使用drop目录的性能与使用异步电子邮件发送类似吗?

实际上有一种方法可以使用

更新:

进一步分析此场景后,在同步控制器内使用SmtpClient.SendAsync似乎会引发以下异常:

异步操作不可用 在这种情况下是允许的。起始页 异步操作必须具有 Async属性设置为true,并且 只能执行异步操作 在之前的页面上开始 预渲染完成事件

作为一种解决方法,可以生成手动线程:

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服务调用等。。。。