我正在使用ConcurrentQueue来存储来自多个线程的消息。
如何创建一些后台线程,当我的队列中有东西时会自动触发?
我正在使用ConcurrentQueue来存储来自多个线程的消息。
如何创建一些后台线程,当我的队列中有东西时会自动触发?
您可能会启动一个带有 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 ...
}
}