首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >线程安全性是否防止ConcurrentBag中的欺骗?

线程安全性是否防止ConcurrentBag中的欺骗?
EN

Stack Overflow用户
提问于 2018-08-20 09:24:13
回答 2查看 83关注 0票数 0

我有以下代码:

代码语言:javascript
复制
public static ConcurrentBag<MyClass> all = new ConcurrentBag<MyClass>();

public static void Load()
{
    all.Add("first");
    all.Add("second");
    all.Add("third");
    all.Add("fourth");

    foreach (MyClass item in all)
    {
        item.Load();
    }
}

它是否保证我将有“第一”项目在我的收藏(这是理想的)?

我可以这样迭代吗?还是我需要使用Parallel.ForEach?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-20 09:36:44

不能保证这些要素是独一无二的:

当订购不重要的时候,袋子对于存储物品很有用,而且与套装不同,袋子支持重复的东西。

https://learn.microsoft.com/en-us/dotnet/api/system.collections.concurrent.concurrentbag-1?redirectedfrom=MSDN&view=netframework-4.7.2#definition

票数 1
EN

Stack Overflow用户

发布于 2018-08-20 13:01:15

基于您的评论,您想要一个单例集合,并且似乎希望它在第一个调用之前加载,我已经使用懒惰创建了一个解决方案。或者,对于ConcurrentBag,您可以使用ImmutableList

代码语言:javascript
复制
using System;
using System.Collections.Concurrent;

public class MyClass
{
    public MyClass(string description)
    {
    }

    public void Load()
    {
    }
}

public class MyClassLoader
{
    public static Lazy<ConcurrentBag<MyClass>> allLazy = new Lazy<ConcurrentBag<MyClass>>(() =>
    {
        ConcurrentBag<MyClass> bag = new ConcurrentBag<MyClass>();
        bag.Add(new MyClass("first"));
        bag.Add(new MyClass("second"));
        bag.Add(new MyClass("third"));
        bag.Add(new MyClass("fourth"));
        foreach (MyClass item in bag)
        {
            item.Load();
        }

        return bag;
    }

    );
    public static void Load()
    {
        foreach (MyClass item in allLazy.Value)
        {
        // Do whatever you want
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51927687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档