Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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#_Multithreading_Email - Fatal编程技术网

C# 发送电子邮件时线程

C# 发送电子邮件时线程,c#,multithreading,email,C#,Multithreading,Email,我有一个发送电子邮件的简单功能,我如何使用线程来加快电子邮件的发送 示例代码非常理想。使用SendAsync isntead。使用静态void方法创建类,该方法将使类开始在单独的线程上执行您希望执行的操作,如下所示: using System; using System.Threading; class Test { static void Main() { Thread newThread = new Thread(new ThreadStart(Work

我有一个发送电子邮件的简单功能,我如何使用线程来加快电子邮件的发送


示例代码非常理想。

使用SendAsync isntead。

使用静态void方法创建类,该方法将使类开始在单独的线程上执行您希望执行的操作,如下所示:

using System;
using System.Threading;

class Test
{
    static void Main() 
    {
        Thread newThread =  new Thread(new ThreadStart(Work.DoWork));
        newThread.Start();
    }
}

class Work 
{
    Work() {}
    public static void DoWork() {}
}
如果不想自己管理线程,另一种选择是使用ThreadPool类

更多关于线程的信息-


更多关于线程池的信息-

但是,使用单独的线程不会加快电子邮件的发送速度。它所能做的就是更快地将控制返回到调用方法。因此,除非您需要这样做,否则我甚至不会为此费心。

您知道,创建一个应用程序后端并每30分钟发送一次电子邮件会更好、更简单。将信息放入需要发送到的数据库中,然后创建一个每30分钟启动一次的应用程序池。当它启动时,您可以发送电子邮件。无需等待事件处理程序发送电子邮件


它对我们有用。我想这会对您有所帮助。

查看下面的链接,了解sendAsync方法的演示。[MSDN]


您可以在另一个线程中运行该函数。使用“向您的邮件发件人发送邮件”功能,您可以:

ThreadPool.QueueUserWorkItem(delegate { SendMail(message); });

当您使用多线程发送电子邮件时,请小心被isp识别为垃圾邮件。最好选择较小的批次,每个批次之间有一定的延迟。

在4.0中,您可以使用以下选项:

new Thread(x => SendMail(message)).Start();


您仍然只能发送1个异步。每个Smtp客户端一次发送一封电子邮件(如果还有另一个正在进行中,则不会让您调用)。因此,当从一个客户端发送大量电子邮件时,此路由没有多大帮助。如果你说然后使用多个客户端,那么async实际上只会加快创建客户端的速度,并告诉它们发送。。。更好的选择:创建线程,为每个线程创建一个客户端,并使用常规Send()。至少在我的测试中,线程是更快的选择,当然它也取决于硬件。。。“调用SendAsync后,您必须等待电子邮件传输完成,然后才能尝试使用send或SendAsync发送另一封电子邮件。”是否有完整源代码的最终解决方案?如果要发送多封电子邮件,您不希望让用户等待太长时间。Le函数是poop。。。调用SendAsync后,您必须等待电子邮件传输完成,然后才能尝试使用send或SendAsync发送另一封电子邮件
public static void SendEmail(MailMessage message)
{
    using (SmtpClient client = new SmtpClient("smtp.XXXXXX.com"))
    {
        client.Send(message);
    }
}