我们是否需要在使用后在C#中处置或终止线程?

时间:2012-05-22 08:05:13

标签: c# multithreading smtpclient

我有以下代码:

        public static void Send(this MailMessage email)
    {
        if (!isInitialized)
            Initialize(false);
        //smtpClient.SendAsync(email, "");
        email.IsBodyHtml = true;

        Thread mailThread = new Thread(new ParameterizedThreadStart(
            (o) => 
            {
                var m = o as MailMessage;

                SmtpClient client= new SmtpClient("smtpserveraddress");
                client.Send(m);

            }));
        mailThread.Start(email);

我希望邮件发送在后台完成而不会干扰主线程。它完蛋后我不在乎。

我是否需要以某种方式处理已创建线程的处置( mailThread )? 或者它在完成工作后会自动处理吗?

请不要推荐SendAsync方法。我想手动创建线程。 Mail.Send只是一个示例场景。

谢谢。

3 个答案:

答案 0 :(得分:44)

NO!

不需要处理Thread对象(BETWEEN,Thread类不提供Dispose方法)。

答案 1 :(得分:7)

当程序结束时,线程被放弃 所以不,你没必要这样做,没有必要(也许我认为)。

答案 2 :(得分:1)

好吧,您的SmtpClient应为Dispose()。我使用任务并行库而不是创建原始线程:

public static void Send(this MailMessage email)
{
    if (!isInitialized)
        Initialize(false);
    //smtpClient.SendAsync(email, "");
    email.IsBodyHtml = true;

    Task.Factory.StartNew(() =>
    {
        // Make sure your caller Dispose()'s the email it passes in at some point!
        using (SmtpClient client = new SmtpClient("smtpserveraddress"))
        {
            client.Send(email);
        }
    });
}