将变量添加到另一个线程正在使用的List中,这是一种不好的做法吗?

Jim*_*_CS 3 c# multithreading task-parallel-library

我在一个单独的线程中运行一个字符串List的无限循环.我希望能够在线程运行时将字符串添加到此列表中.我觉得我写的代码是"错的".在无限循环中,我遍历列表中的每个字符串并对其执行操作,因此我似乎无法从主线程向该列表添加字符串,因为我将干扰同时发生的变量被另一个线程访问.这是我的代码的样子 -

class StringTest
{
public List<string> ListOfStrings = new List<string>();
public Task MainLoopTask;
bool IsRunning = false;

public void AddToList(string myString)
{
    ListOfStrings.Add(myString); // Adding a string to the list

    if (!IsRunning)
    {
        IsRunning = true;
        MainLoopTask = Task.Factory.StartNew(MainLoop);
    }
}

public void MainLoop()
{
    while (true)
    {
        foreach(string s in ListOfStrings) // Operating on the list in a separate thread
        {
            ...
            ...
            ...
        }
}
Run Code Online (Sandbox Code Playgroud)

}

这个坏代码还是可以的?如果它不好,我该怎么办才能解决它?

SLa*_*aks 7

这不安全,最终会在制作中失败.

相反,您应该使用线程安全的集合 ; 可能是并发队列.