喜 我想构建一个简单的程序
Parallel.ForEach(m_CustomerArr, customer =>
{
customer.OrderSomthing();
});
当客户订购他查询数据库的东西时,当他的物品用完时他会联系供应商
public bool takeOrder(Order o)
{
lock (s_QueueLocker)
{
OrderQueue.Enqueue(o);
}
//waits here to be signaled by the working thread of supplier
o.m_ManualResetEvent.WaitOne();**
return true;
}
只有一个供应商拥有一个拥有supplierthread的队列:
public void CreateThead()
{
Order currentOrder;
while (true)
{
if (OrderQueue.Count != 0)
{
currentOrder = OrderQueue.Dequeue();
DoOrder(currentOrder);
}
}
}
private void DoOrder(Order currentOrder)
{
//update the db this function runes only in one thread
currentOrder.m_ManualResetEvent.Set();
System.Threading.Thread.Sleep(5000);
}
其中m_ManualResetEvent是传递给c'tor中每个订单的客户的成员
public class Order
{
public ManualResetEvent m_ManualResetEvent;
public string m_Query;
public int m_Quntity;
public Order(ManualResetEvent customerManualResetEvent, string query, int quntity)
{
m_ManualResetEvent = customerManualResetEvent;
m_Query = query;
m_Quntity = quntity;
}
}
什么是最好的方法来阻止线程等待(**)并在c中发信号通知他? 我是c#multi-threading的新手,我的概念来自Linux内核,所以C#在一个已经建立实现它的人的类中可能更容易......
所以我的问题是'有更好的设计,更好的实践,更好的方法来做上述事情吗?
答案 0 :(得分:1)
如果您真的只是将数据写入数据库,您应该看看是否可以在线程本身而不是在单独的线程中编写它。如果这甚至可以远程实现,那将为您省去很多麻烦。