gpt4 book ai didi

c# - 多线程列表模式建议

转载 作者:行者123 更新时间:2023-12-02 15:38:49 24 4
gpt4 key购买 nike

我制作了一个应用程序,其中还包含文件夹/文件扫描仪。我遇到了线程结构的问题。

它是如何工作的:对于它找到的每个文件夹/文件,它都会启动一个线程。每个线程内都有一个函数,它使用列表来检查是否找到相似的项目,以便将其添加到现有项目中。如果未找到,它将将该项目添加到前面提到的列表中。线程并行执行(异步)。

问题:因为它是异步的,所以有时会在列表检查上失败。这是因为检查和添加到列表之间有一个时间段造成的。可能发生的情况是,检查返回不存在类似的项目,而实际上确实存在。这将导致列表中出现相同的项目。

我还让线程相互等待。我真的很喜欢它在前端带来的效果。 (项目很好地实时添加到列表中)。但这对于很多文件夹/文件来说需要很长时间。

现在我正在考虑在函数之间进行混合,但我真的很希望看到异步线程的速度和每个线程等待的安全性的结合。

有人有什么想法吗?

最佳答案

您应该锁定检查列表并添加值的整个代码部分。

类似这样的事情:

private void YourThreadMethod(object state)
{
// long taking operation

lock (dictionary)
{
if (!dictionary.ContainsKey(yourItemKey))
{
// construct object, long taking operation

dictionary.Add(yourItemKey, createdObject);
}
}
}

这样,每个线程都必须等待,直到list可以自由使用。如果您想要更高级的解决方案,您可以阅读 ReaderWriterLockSlim类提供了更细粒度的解决方案。

关于c# - 多线程列表模式建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30372498/

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