如题,现在有List<string> errorIDS = new List<string>(),这个集合我用来保存出错的数据
服务中有2个Timer,一个用来处理数据,如果发生异常,errorID.Add("错误数据的ID")
另一个Timer用来修复异常数据,在Tick事件中遍历errorIDS,这里会不会有问题,当正在遍历的时候,第一个timer执行了errorID.Add("错误数据的ID")
ConcurrentBag<T>
要的就是他了!!!
string id;
if (errorIDS.TryTake(out id)) {}
这样跟用Queus是一个效果了吧
@MSky:你有dequeue的过程么?有的话就用concurrentqueue吧。
@Daniel Cai: 是的,已经用了
用队列、要求5个字。
如果只是读取,写入操作,变量声明全局应该没问题,但是你在另一个处理异常线程中,假设处理成功,你肯定要移除errorid,这时候你在操作这个变量就会错误,建议还是使用保证线程安全的集合,去记录errorids
List是非线程安全类型,肯定是有问题的,你可以用ConcurrentBag、ConcurrentQueue,或者自己实现线程同步