如何解决如何优化通过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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。