gpt4 book ai didi

c# - List> 线程安全吗?

转载 作者:太空狗 更新时间:2023-10-29 18:31:37 27 4
gpt4 key购买 nike

我不想维护一个包含多个 BlockingCollections 的列表

List<BlockingCollection<ExtDocument>> a = new List<BlockingCollection<ExtDocument>>();

如果任何“队列”仍有待处理的项目,则检查子线程:

if (a.Where(x => x.IsAddingCompleted).Count > 0)

是一个 List<T> 的用法在这种情况下是线程安全的如果列表中的项目数在初始化后没有改变(集合中的阻塞列表的内容将改变偏离方向......)?

或者我应该选择 array of BlockingCollection或以下结构:

BlockingCollection<BlockingCollection<workitem>> a = new BlockingCollection<BlockingCollection<workitem>>();

最佳答案

使用数组代替 List<T> 的好处是你可以然后使用 BlockingCollection<T>.TakeFromAny和类似的方法。最有可能的是,您从错误的角度来解决问题 - 您的处理线程可以简单地做 BlockingCollection<T>.TryTakeFromAny ,如果它是假的,你就完成了。完全线程安全,而且性能相当好。所以你的处理循环看起来像这样:

while (BlockingCollection<ExtDocument>.TryTakeFromAny(collections, out workItem) >= 0)
{
// Do work on workItem
}

// We're done!

关于c# - List<BlockingCollection<T>> 线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26058058/

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