如何优化通过WCF调用读写Collection的并发性?

问题描述

| 我的WCF服务端有一个Collection变量和一个Add方法。 Add方法会在触发某些事件时将一些记录记录到Collection中。 要求如下:现在在客户端,有一个线程可以每秒在WCF服务端读取Collection,并删除之前读取的记录,并将其显示在前台。 我的问题是:如何控制读写的一致性会更好。(不是线程安全的,因此在读取时会得到重复的值) 当前,我使用计时器进行并发操作,当触发计时器事件时,使计时器停止直到读取结束。然后让计时器启动(以防止计时器事件未完全执行,再次触发下一个操作)。我使用Monitor.TryEnter作为线程锁,代码如下:
void ReadFromService()
{
//do........
timer.start();//
}


Timer timer=new Timer(1000);

timer.Elapsed +=(s,e)=>{
timer.stop();
ReadFromService();
};
timer.start();
我认为这不是一个好主意,希望有人能给我一些好的建议。     

解决方法

在Reader客户端中最好不要设置计时器。并不是说并发特别困难,而是在通信通道上轮询效率低下。 相反,您可以让ѭ1方法在Reader客户端中触发一个事件,以将添加的记录传递给该事件,或者使该事件充当读取集合的更新快照的触发器,然后该服务在返回返回值之前适当地锁定该集合。新快照。 这是Observer模式的一种有限形式,如果您有更多完整的集合读取器,或者想要查看集合中不同数据子集的变化的新读取器,则可以轻松扩展。 有关WCF事件(回调)的信息,请参见此处。     ,看看
ConcurrentList<T>
此链接上的课程:http://www.deanchalk.me.uk/post/Task-Parallel-Concurrent-List-Implementation.aspx     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...