【问题标题】:How to optimize the concurrency of reading and writing a Collection by WCF calling?WCF调用如何优化读写Collection的并发性?
【发布时间】:2011-04-27 14:50:04
【问题描述】:
  1. 在我的 WCF 服务端有一个 Collection 变量和一个 Add 方法。 Add 方法会在触发某些事件时将一些记录记录到 Collection 中。 以下是要求:现在在客户端,有一个线程每秒读取WCF服务端的Collection,并将之前读取的记录删除并显示到前台。

我的问题是:如何控制读写的一致性会更好。(不是线程安全的,所以读取时会得到重复值)

目前我使用定时器来并发它,当定时器事件被触发时,使定时器停止直到读取结束。然后让 Timer 启动(防止定时器 Event 未完全执行,再次触发下一次 Operation)。我使用Monitor.TryEnter作为线程锁,代码如下:

void ReadFromService()
{
//do........
timer.start();//
}


Timer timer=new Timer(1000);

timer.Elapsed +=(s,e)=>{
timer.stop();
ReadFromService();
};
timer.start();

我认为这不是一个好主意,希望有人能给我一些好的建议。

【问题讨论】:

    标签: c# .net multithreading wcf thread-safety


    【解决方案1】:

    最好不要在您的阅读器客户端中设置计时器。并不是说并发特别困难,只是通过通信渠道轮询效率低下。

    您可以改为让Add 方法在读取器客户端中触发一个事件,以将添加的记录传递给它,或者让该事件充当触发器以读取集合的更新快照,然后服务锁定在返回新快照之前适当地收集。

    这是Observer pattern 的有限形式,如果您有更多完整的集合阅读器,或者想要查看集合中不同数据子集的变化的新阅读器,则可以轻松扩展。

    有关 WCF 事件(回调)here 的信息。

    【讨论】:

      【解决方案2】:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-17
        • 1970-01-01
        • 2017-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多