我正在处理需要读取数据并将其存储在单独数据库中的应用程序,为此我创建了2个Threads,一个将每10秒填充一次BlockingCollection,另一个将读出相应地收集和更新数据库。
出现的问题是:每当我尝试TryTake过快时,BlockingCollection将返回所有元素,但所有元素彼此相同。我检查了输入,对象确实填充正确。
每当我添加System.Threading.Thread.Sleep(10);
时,问题就消失了。我似乎没必要实施这样的机制,任何想法?
代码:
static void ReadServers()
{
XmlDocument xmlInput = new XmlDocument();
xmlInput.Load(NServerAPI);
XmlElement root = xmlInput.DocumentElement;
XmlNodeList nodes = root.SelectNodes("hoststatus");
foreach (XmlNode node in nodes)
{
NServer server = new NServer();
server.HostName = node.SelectSingleNode("name").InnerText;
serverStatusQueue.Add(server);
}
}
static void ServerQueueReader()
{
NServer server = new NServer();
while (serverStatusQueue.TryTake(out server, Int32.MaxValue))
{
Console.WriteLine(server.HostName);
}
}
public class NServer
{
static string hostName;
public string HostName
{
get { return NServer.hostName; }
set { NServer.hostName = value; }
}
static string statusText;
public string StatusText
{
get { return NServer.statusText; }
set { NServer.statusText = value; }
}
static int currentState;
public int CurrentState
{
get { return NServer.currentState; }
set { NServer.currentState = value; }
}
static int hostID;
public int HostID
{
get { return NServer.hostID; }
set { NServer.hostID = value; }
}
}