gpt4 book ai didi

c# - 将变量添加到另一个线程正在使用的列表中,这是不好的做法吗?

转载 作者:行者123 更新时间:2023-11-30 13:40:14 25 4
gpt4 key购买 nike

我在一个单独的线程中有一个无限循环,该线程对字符串列表进行操作。我希望能够在线程运行时向该列表中添加字符串。我觉得我正在编写的代码是“错误的”。在无限循环中,我遍历列表中的每个字符串并对其执行操作,所以看起来我不能只从我的主线程向这个列表添加一个字符串,因为我会干扰一个并发的变量正在被另一个线程访问。这是我的代码的样子 -

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
{
...
...
...
}
}

这是错误的代码还是没问题?如果它坏了,我能做些什么来修复它?

最佳答案

那是不安全的,最终会在生产中失败。

相反,您应该使用 thread-safe collection ;可能是并发队列。

关于c# - 将变量添加到另一个线程正在使用的列表中,这是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8631114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com