2013-06-01 22 views
0

我想要做的事:多個異步工人,工作,以便返回

從MasterQueue每發送一個單獨的隊列,以自己的異步工人

等待所有異步工作人員來完成,並返回結果

在同一訂單的訂單結果他們在MasterQueue

<Queue<Queue<object[]>> MasterQueue = new Queue<Queue<object[]>>(); 

while (MasterQueue.Count > 0) 
{ 

Queue<object[]> Queue = MasterQueue.Dequeue(); 

//Send Queue to an Async Worker for processing... 
//Lets say 5 in total that finish randomly so 3, 2, 5, 4, 1 

} 

//Wait for all 5 Async workers to finish and return their work, then use the work in original order... 

//Use work from 1 
//Use work from 2 
//Use work from 3 
//Use work from 4 
//Use work from 5 
+0

出列發生在順序,所以只是增加一個計數器,並用它來重新排序完成在年底 - 或者,可以在TPL(可枚舉/並行)的方法來照顧這直? – user2246674

+0

您可能想查看[TPL Dataflow](http://msdn.microsoft.com/zh-cn/library/hh228603.aspx)。 –

回答

0

創建任務的陣列(每個異步工人一個任務),並在任務使用Task.WaitAll(任務)。任務的順序將與列表/數組的順序相同。

喜歡的東西:

while (masterQueue.Count > 0) 
{ 
    Queue<object[]> queue = masterQueue.Dequeue(); 

    //Send Queue to an async Worker for processing... 
    tasks.Add(Process(queue)); 
} 

// tasks are already in order 
Task.WaitAll(tasks.ToArray()); 

... 
async static Task Process(Queue<object[]> queue) 
{ 
    await Task.Factory.StartNew(() => { }); 
}