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'这样的东西,它在返回时删除了一个项目。
即使有一个操作允许这样做,在后台它仍然需要删除和添加它们。
但是也许你不需要两个列表?也许你可以只有一个包含所有项目的列表,每个项目都有一个状态,你可以将其设置为不同的值或其他东西。当然,我不知道你的具体情况,所以这可能不可行。
"取并删除"听起来很像"Dequeue",所以也许你可以使用Queue或ConcurrentQueue?
但是,枚举器不会从队列中删除项,因此您必须自己多次调用Dequeue。