1
基本上我有一個我想要處理的對象的靜態自定義隊列。從多個線程中,我需要啓動一個單獨的任務來處理排隊的對象,當所有項目出列時停止任務。異步啓動只有一個任務來處理靜態隊列,當它完成時停止
一些僞代碼:
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();
}
}
如果它的確與衆不同我的自定義隊列,直到他們達到一定的年齡,基本上保持項的隊列,然後讓他們離隊。每次接觸一件物品時,它的計時器會重新開始。我知道這件作品很好。
我正在努力的部分是並行性。 (顯然,我不知道我在這裏做什麼)。 我想要的是讓一個線程處理隊列直到完成,然後離開。如果另一個調用進來,它不會啓動一個新的線程,除非必須。
我希望能解釋我的問題沒關係。
謝謝。我甚至不知道存在。出於好奇,你是怎麼知道那裏的?我想,我可能只需要閱讀更多「X.0中的新功能」文章。 – 2012-04-09 23:48:46
@blesh System.Collections.Concurrent有許多值得研究的好東西......這是記錄http://msdn.microsoft.com/en-us/library/dd460718.aspx對於即將到來的,請參閱:http:/ /blogs.msdn.com/b/pfxteam/archive/2011/09/17/10212961.aspx – 2012-04-10 00:10:11