【发布时间】:2014-03-20 13:28:15
【问题描述】:
我的项目中有一种情况,我连接到多个服务器并监听事件。每当从服务器接收到一个事件时,Handler 应该将该事件添加到公共队列中进行处理。所有连接都应将接收到的事件添加到队列中。
foreach(var item in collection)
{
Connection c = new connection(item);
c.start();
c.EventReceived+=new EventHandler(myHandler);
list.add(c);
}
protected void myHandler(eventArgs)
{
//add it to the concurrent queue
}
我怀疑它是否能够在没有任何线程问题的情况下处理这些事件。如果您有任何模式或内置 API 可以安全地处理此问题,请告诉我。
【问题讨论】:
-
你搞错了。它是不是线程安全的“列表”。订阅事件不是问题,因为对象是新的。需要锁定以防止在向列表添加对象时访问列表的任何代码。这里要小心,线程会吃掉你。
标签: c# .net multithreading event-handling thread-safety