我们是否需要在使用后释放或终止 C# 中的线程

本文关键字:终止 线程 释放 是否 我们 | 更新日期: 2023-09-27 18:35:06

我有以下代码:

        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)的处置?还是在完成工作时自动处置?

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

谢谢。

我们是否需要在使用后释放或终止 C# 中的线程

不!

不需要释放 Thread 对象(顺便说一句,Thread 类不提供 Dispose 方法)。

线程在其例程结束时被拆分。
所以不,你不必这样做,没有必要(我认为也不可能)。

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

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);
        }
    });
}