Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 622147
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 13, 20262026-05-13T18:57:11+00:00 2026-05-13T18:57:11+00:00

Sorry this question is not very clear, if I know the correct words to

  • 0

Sorry this question is not very clear, if I know the correct words to describe the problem, Google would be likely to come up with the answer.

I am looking for a queue class that:

  • Lets any number of threads put an item on the queue
  • Items are processed in the order they are added to the queue
  • I don’t mind what thread process an item
  • Only one item is processed at a time.
  • I rather not have a thread blocked waiting for an item to be added to the queue if there are no items on the queue.
  • The normal case is for the queue to be empty most of the time.

e.g Just like what happens with a BeginInvoke on a WinForms windows… (Or PostMessage if you have every done raw win32 programming)
We are using .net 3.5

I am looking for something ready-made in the .net framework, or a open source project that has good unit tests, as I don’t wish to have to write all the unit tests for a home-make solution.


For background, see Why are my message be processed out of order over a single WCF TCP channel (with ConcurrencyMode.Reentrant)? by using this depatcher I was able to change to using ConcurrencyMode.Single and still advoid deadlocks.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-13T18:57:11+00:00Added an answer on May 13, 2026 at 6:57 pm

    Here’s a sketch of a class that can do that:

    public class WorkerQueue<T> {
        private Queue<T> workerQueue   = new Queue<T>();
        private object   padlock       = new object();
        private bool     isProcessing  = false;
        private Thread   workerThread;
    
        public void QueueWorkItem(T item) {
            lock(padlock) {
                workerQueue.Enqueue(item);
                if (!isProcessing) {
                    isProcessing = true;
                    workerThread = new Thread(() => { this.ProcessWork });
                    workerThread.Start();
    
                }
            }
        }
    
        private void ProcessWork() {
            // 1) Thread-safe dequeue operation
            // 2) Keep processing while work is on the queue. External callers can
            //    add items to the queue while this is ongoing.
            // 3) When the queue is empty, set isProcessing to false (thread-safely)
        }
    
    }
    

    Applications would use it like this:

    public class Application {
        private WorkerQueue<object> workerQueue = new WorkerQueue<object>();
    
        // This can run on multiple threads if need be
        public void SomeMethodThatCreatesWork() {
            object workItem = ExternalCall();
            this.workerQueue.QueueWorkItem(workItem);
        }
    }
    

    It would probably be useful to let applications stop the processing as well, probably by adding a flag that ProcessWork could check after each item is dequeued, but it’s not clear what to do with unprocessed items (perhaps it would be enough to allow access to them and let the caller decide).

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I'm sorry for this very newbish question, I'm not much given into web development.
Sorry for this not being a real question, but Sometime back i remember seeing
Sorry for the second newbie question, I'm a developer not a sysadmin so this
I'm sorry this question is going to be a bit vague because I'm not
I am very new to this and i am sorry to ask this question.
Hi this question or problem i have its very hard i have search and
Ok sorry this might seem like a dumb question but I cannot figure this
Sorry I couldn't find the best heading for this question. Following is my requirement.
Sorry if this sounds like a really stupid question, but I need to make
Sorry if this is a comp-sci 101 question. I'm just unsure if I'm missing

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.