LINQ / Objects如何删除项目并将它们添加到另一个列表

本文关键字:添加 列表 另一个 Objects 删除项目 LINQ | 更新日期: 2023-09-27 18:04:54

我正在使用Linq与对象,并有一个问题。

实际工作负载在后台任务中处理。

实际的工作负载不应该放在进一步的任务上。更重要的是,处理实际工作项的方法做得相当快,并给出一个结果,因此完整的工作负载被放在工作项的块上。

一次,我只处理列表的前n个对象,因此我取n个对象,然后从完整的工作项列表中删除它们。

Roughly:
int amount = 100;
List<WorkItem> actualWorkload = null;
lock(lockWorkload){ // complete Workload is filled in other thread
    if (actualWorkload.Count > amount)
    {
        actualWorkload.AddRange(completeWorkload.Take(amount));
    }
    else
    {
        actualWorkload.AddRange(completeWorkload);
    }
    completeWorkload.RemoveAll(x => actualWorkload.Contains(x));
}
//do something with workitems Process(actualWorkload);

我的问题是:"Take"answers"Remove"能否以某种方式结合起来,这样只需要一步就可以从列表中取出项目并直接删除该项目?我搜索像BlockingCollection的'Take'这样的东西,它在返回时删除了一个项目。

LINQ / Objects如何删除项目并将它们添加到另一个列表

即使有一个操作允许这样做,在后台它仍然需要删除和添加它们。

但是也许你不需要两个列表?也许你可以只有一个包含所有项目的列表,每个项目都有一个状态,你可以将其设置为不同的值或其他东西。当然,我不知道你的具体情况,所以这可能不可行。

"取并删除"听起来很像"Dequeue",所以也许你可以使用Queue或ConcurrentQueue?

但是,枚举器不会从队列中删除项,因此您必须自己多次调用Dequeue。