C# ConcurrentBag与list

ConcurrentBag<T>与List<T>

我遇到的一个情况是:

using System.Collections.Concurrent;

class WX
{
public string wxNo;
public string wxPsw;
}

static public bool ReadWechatIds(string path,out ConcurrentBag<WX> list)
{
list = new ConcurrentBag<WX>();
string[] wechatlist = File.ReadAllLines(path);
string []seperator={"--"};
//WX wx = new WX();
foreach(string i in wechatlist)
{
string[] wechatid = i.Split(seperator,StringSplitOptions.RemoveEmptyEntries);
WX wx = new WX();
wx.wxNo = wechatid[0];
wx.wxPsw = wechatid[1];
list.Add(wx);
}
if (list!= null)
return true;
else
return false;
}

比如 wechalist里有100个不一样的数值,如果把注释掉的东西写到外面,会出现100个相同的数值

这是这种集合ConcurrentBag的特性

如果换成list<T>

static public bool ReadWechatIds1(string path, out List<WX> list)
{
list = new List<WX>();
string[] wechatlist = File.ReadAllLines(path);
string[] seperator = { "--" };
//WX wx = new WX();
foreach (string i in wechatlist)
{
string[] wechatid = i.Split(seperator, StringSplitOptions.RemoveEmptyEntries);
WX wx = new WX();
wx.wxNo = wechatid[0];
wx.wxPsw = wechatid[1];
list.Add(wx);
}
if (list != null)
return true;
else
return false;
}

wechalist里有100个不一样的数值,如果把注释掉的东西写到外面,会出现100个不同的数值

时间: 2024-08-11 07:50:00

C# ConcurrentBag与list的相关文章

【C#】ConcurrentBag&lt;T&gt; 方法

转载自MSDN. ConcurrentBag<T> 类型公开以下成员. 方法 显示: 继承 保护   名称 说明 Add 将对象添加到 ConcurrentBag<T> 中. CopyTo 从指定数组索引开始,将 ConcurrentBag<T> 元素复制到现有的一维 Array 中. Equals(Object) 确定指定的 Object 是否等于当前的 Object. (继承自 Object.) Finalize 允许对象在“垃圾回收”回收之前尝试释放资源并执行其他

线程安全ConcurrentBag

ConcurrentBag并行,不保证顺序,线程安全 public static void ConcurrentBagWithPallel() { ConcurrentBag<int> list = new ConcurrentBag<int>(); Parallel.For(0, 10000, item => { list.Add(item); }); //能够达到10000 Console.WriteLine("ConcurrentBag's count is

C# 内存模型

C# 内存模型 This is the first of a two-part series that will tell the long story of the C# memory model. The first part explains the guarantees the C# memory model makes and shows the code patterns that motivate the guarantees; the second part will detai

C#多线程总结

线程的创建 Thread 1 var thread = new Thread(() => 2 { 3 Console.WriteLine("thread start:" + Thread.CurrentThread.ManagedThreadId); //ManagedThreadId为线程的id 4 Thread.Sleep(10000); 5 Console.WriteLine("thread end:" + Thread.CurrentThread.Ma

【C#进阶系列】29 混合线程同步构造

上一章讲了基元线程同步构造,而其它的线程同步构造都是基于这些基元线程同步构造的,并且一般都合并了用户模式和内核模式构造,我们称之为混合线程同步构造. 在没有线程竞争时,混合线程提供了基于用户模式构造所具备的性能优势,而多个线程竞争一个构造时,混合线程通过基元内核模式的构造来提供不“自旋”的优势. 那么接下来就是个简单的混合线程同步构造的例子,可与上一章最后的那些例子相比较: public class SimpleHybridLock : IDisposable { private Int32 m

Parallel Programming-Concurrent Collections

备忘:asp.net平台下线程安全集合类.   Class Description BlockingCollection<T> Provides blocking and bounding capabilities for thread-safe collections that implement IProducerConsumerCollection<T>. ConcurrentBag<T> Represents a thread-safe, unordered c

浅谈C#集合

集合是.NET FCL(Framework Class Library)中很重要的一部分,也是我们开发当中最常用到的功能之一,几乎是无处不在.俗话说知其然,知其所以然,平常看到IEnumerable,IEnumerator,ICollection是不是知道他们之间各自的区别?除了List和Dictionary以外,你还用过哪些其它的集合类?废话少说,今天我们就来看一些这些定义集合类的接口以及他们的实现. 集合接口 关联性泛型集合类 非关联性泛型集合类 推荐使用场景 非泛型集合类 线程安全集合类

多线程枚举安全的List

最近在做windows runtime下APP开发的工作.在Service层请求返回后,往往会通过回调的形式来通知UI更新数据.多个线程操作经常出现foreach抛出异常:System.InvalidOperationException: 集合已修改:可能无法执行枚举操作,导致APP crash. 在网上搜索了一下,得出以下结论: 实现一个真正线程安全的List是很困难的,具体可以参考这篇Why are thread safe collections so hard?. 使用Concurrent

C#并行编程 z

目录 C#并行编程-相关概念 C#并行编程-Parallel C#并行编程-Task C#并行编程-并发集合 C#并行编程-线程同步原语 C#并行编程-PLINQ:声明式数据并行 背景 基于任务的程序设计.命令式数据并行和任务并行都要求能够支持并发更新的数组.列表和集合. 在.NET Framework 4 以前,为了让共享的数组.列表和集合能够被多个线程更新,需要添加复杂的代码来同步这些更新操作. 如您需要编写一个并行循环,这个循环以无序的方式向一个共享集合中添加元素,那么必须加入一个同步机制