0

在新线程中声明的局部变量的使用有什么不同吗?

string emailSubject = "New message notification";
string imagePath = somePath;
string conversationName = entity.Name;

new Thread(delegate()
{
    foreach (var user in participantList)
    {
        string newEmailBody = emailBody.Replace("###ImagePath###", imagePath)
                                           .Replace("###UserName###", user.Name)
                                           .Replace("###ConversationName###", conversationName);

        MailUtil.SendEmail(user.Email, emailSubject, newEmailBody);
     }
 }).Start();

在新线程中声明它们是否更安全?像这样:

new Thread(delegate()
{
    string emailSubject = "New message notification";
    string imagePath = somePath;
    string conversationName = entity.Name;

    foreach (var user in participantList)
    {
        string newEmailBody = emailBody.Replace("###ImagePath###", imagePath)
                                           .Replace("###UserName###", user.Name)
                                           .Replace("###ConversationName###", conversationName);

        MailUtil.SendEmail(user.Email, emailSubject, newEmailBody);
    }
}).Start();
4

1 回答 1

1

由于示例中的所有三个变量都是不可变的(string是不可变的),因此选择哪种实现没有区别。唯一的区别是,在第一个示例中,您的变量(指针)可以从其他线程更改,在其他情况下它是安全的。但是,当您使用复杂类型时,您必须确保您的类型是线程安全的,因为以其他方式同时对不同线程中的变量进行操作可能会导致状态损坏。

于 2013-08-29T09:01:58.113 回答