yoav.str
yoav.str

Reputation: 1534

how to handle QUEUE of threads c#

hi i want to build a simple program which does

  Parallel.ForEach(m_CustomerArr, customer =>
        {
            customer.OrderSomthing();
        });

when customer order something he query database, when his item run out of he contact to the supplier

      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;
    }  

there is only one supplier who holdes a queue who have a 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);
    }

where m_ManualResetEvent is a member of customer whom is passed to every order in 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;
    }

}

what would be a the best way to stop the thread on wait (in **) and signal him like mutex in c ? I am new to c# multi-threading and my concept is from Linux kernel so things might be easier in C# in a class somebody already built whom implement it...

so my question is ' is there a better design , better practice , better way to do the above ?

Upvotes: 1

Views: 354

Answers (1)

Pieter van Ginkel
Pieter van Ginkel

Reputation: 29640

If you are really just writing data to the database, you should see whether it's possible to write it in the thread itself and not on a separate thread. If that is even remotely possible, that will save you a lot of trouble.

Upvotes: 1

Related Questions