0

我正在使用ConcurrentQueue来存储来自多个线程的消息。

如何创建一些后台线程,当我的队列中有东西时会自动触发?

4

1 回答 1

0

您可能会启动一个带有 Thread.Sleep() 的工作线程,并在睡眠后询问您的队列是否计数 > 0。

您可以将线程初始化代码放在类的构造函数或初始化方法中。

    ...
    var queue = new ConcurrentQueue<T>(); //Use your generic type for T
    var thread = new Thread(() => WorkOnQueue(queue));

    thread.IsBackground = true;
    thread.Name = "My Worker Thread";
    thread.Start();
    ...


    private void WorkOnQueue(ConcurrentQueue queue)
    {   
        var pause = TimeSpan.FromSeconds(0.05);
        while (!abort) // some criteria to abort or even true works here
        {
            if (queue.Count == 0)
            {
                // no pending actions available. pause
                Thread.Sleep(pause);
                continue;
            }

            DoWork(); //Contains the TryDequeue ...
        }
    }
于 2016-10-25T07:09:02.027 回答