title: Process queue with multithreading or tasks
body: <p>I have a telephony message application in which there are many many messages to be processed.Because telephone ports are limited, so the message will be processed first in first out. Each message has a flag 'Acknowledge' that indicates whichever is processed. It was initialized as false of course. </p>
  
  <p>I want to put all messages into a queue then process them with multiple threads or tasks.</p>
  
  <pre><code>    public class MessageQueue
      {
          public Queue MessageWorkItem { get; set; }
          public Messages Message { get; set; }
          public MessageQueue()
          {
              MessageWorkItem = new Queue();
              Message = new Messages();
          }
          public void GetMessageMetaData()
          {
              try
              {
                  // It is just a test, add only one item into the queue
                  Message.MessageID = Guid.NewGuid();
                  Message.NumberToCall = "1111111111";
                  Message.FacilityID = "3333";
                  Message.NumberToDial = "2222222222";
                  Message.CountryCode = "1";
                  Message.Acknowledge = false;
              }
              catch (Exception ex)
              {
              }
          }
  
          public void AddingItemToQueue()
          {
              GetMessageMetaData();
              if (!Message.Acknowledge)
              {
                  lock (MessageWorkItem)
                  {
                      MessageWorkItem.Enqueue(Message);
                  }
              }
          }
      }
  
      public class Messages
      {
          public Guid MessageID { get; set; }
          public string NumberToCall { get; set; }
          public string FacilityID { get; set; }
          public string NumberToDial { get; set; }
          public string CountryCode { get; set; }
          public bool Acknowledge { get; set; }
      }
  </code></pre>
  
  <p>Now my question is how to dequeue the item from the queue with multithreading.
  For the each item from the queue, I want to run a script.</p>
  
  <pre><code>        public void RunScript(Message item)
          {
              try
              {
                  PlayMessage(item); 
                  return;
              }
              catch (HangupException hex)
              {
                  Log.WriteWithId("Caller Hungup!", hex.Message);
              }
              catch (Exception ex)
              {
                  Log.WriteException(ex, "Unexpected exception: {0}");
              }
          }
  </code></pre>
  
  <p>What I thought was to see if </p>
  
  <blockquote>
    <p>if(MessageWorkItem.Count >= 1)
    Then doing something but I do need code help.</p>
  </blockquote>