基本上我有一个我想要处理的对象的静态自定义队列。从多个线程中,我需要启动一个将处理排队对象的单个任务,当所有项目都出队时停止任务。
一些伪代码:
static CustomQueue _customqueue;
static Task _processQueuedItems;
public static void EnqueueSomething(object something) {
_customqueue.Enqueue(something);
StartProcessingQueue();
}
static void StartProcessingQueue() {
if(_processQueuedItems != null) {
_processQueuedItems = new Task(() => {
while(_customqueue.Any()) {
var stuffToDequeue = _customqueue.Dequeue();
/* do stuff */
}
});
_processQueuedItems.Start();
}
if(_processQueuedItems.Status != TaskStatus.Running) {
_processQueuedItems.Start();
}
}
如果它有所不同,我的自定义队列是一个基本上保存项目直到它们达到一定年龄的队列,然后允许它们出列。每次触摸一个项目时,它的计时器都会重新启动。我知道这件作品很好。
我正在努力解决的部分是并行性。(显然,我不知道我在这里做什么)。我想要的是让一个线程处理队列直到它完成,然后离开。如果另一个调用进来,它不会启动一个新线程,除非它必须这样做。
我希望这可以解释我的问题。