web-dev-qa-db-ja.com

使用後にC#でスレッドを破棄または終了する必要がありますか?

私は次のコードを持っています:

        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は単なるシナリオの例です。

ありがとうございました。

32
Aaron Azhari

番号!

threadオブジェクトを破棄する必要はありません(BETWEEN、ThreadクラスはDisposeメソッドを提供しません)。

47
platon

[。

8
Marco

さて、あなたのSmtpClientDispose()になっているはずです。生のスレッドを作成する代わりに、タスク並列ライブラリを使用します。

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);
        }
    });
}
1
Jesse C. Slicer