我正在将 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”和“Remove”能否以某种方式结合起来,这样只需一步即可获取项目并直接从列表中删除这些项目?我搜索类似于 BlockingCollection 的“Take”的东西,它在返回时删除了一个项目。