C# 多个异步工作者,按顺序返回工作

C# 多个异步工作者,按顺序返回工作,c#,asynchronous,worker,C#,Asynchronous,Worker,我想做的是: 从主队列向各自的异步工作进程发送单个队列 等待所有异步工作进程完成并返回结果 订单结果的顺序与它们在主队列中的顺序相同 <Queue<Queue<object[]>> MasterQueue = new Queue<Queue<object[]>>(); while (MasterQueue.Count > 0) { Queue<object[]> Queue = MasterQueue.Dequeue(

我想做的是:

从主队列向各自的异步工作进程发送单个队列

等待所有异步工作进程完成并返回结果

订单结果的顺序与它们在主队列中的顺序相同

<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)
{
Queue Queue=MasterQueue.Dequeue();
//将队列发送到异步工作进程以进行处理。。。
//让我们假设总共5个,随机完成3,2,5,4,1
}
//等待所有5个异步工作者完成并返回他们的工作,然后按原始顺序使用工作。。。
//使用从1开始的工作
//使用从2开始的工作
//使用从3开始的工作
//使用从4开始的工作
//使用从5开始的工作
创建一个任务数组(每个异步工作者一个任务)并在任务上使用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(() => { });
}
while(masterQueue.Count>0)
{
Queue Queue=masterQueue.Dequeue();
//将队列发送到异步工作进程以进行处理。。。
添加(进程(队列));
}
//任务已经就绪
Task.WaitAll(tasks.ToArray());
...
异步静态任务进程(队列)
{
wait Task.Factory.StartNew(()=>{});
}

Dequeue是按顺序进行的,因此只需增加一个计数器,并使用它对最后完成的数据进行重新排序——或者,TPL(可枚举/并行)方法可以直接处理这个问题吗?您可能需要研究一下。