很多时候,我的列表过程太大,我不得不将它们分成几批进行处理。
有没有办法将其封装在方法或扩展中。我似乎必须在任何地方编写这个批处理逻辑。
const int TAKE = 100;
int skip = 0;
while (skip < contacts.Count)
{
var batch = contacts.Skip(skip).Take(TAKE).ToList();
DoSomething(batch);
skip += TAKE;
}
我想做类似的事情 -
Batch(contacts, DoSomething);
或类似的东西,所以我不必一次又一次地写这个批处理逻辑。
答案 0 :(得分:1)
使用this thread中的批处理解决方案似乎微不足道:
const int batchSize = 100;
foreach (var batch in contacts.Batch(batchSize))
{
DoSomething(batch);
}
如果你想把它包起来:
public static void ProcessInBatches<TSource>(
this IEnumerable<TSource> source,
int batchSize,
Action<IEnumerable<TSource>> action)
{
foreach (var batch in source.Batch(batchSize))
{
action(batch);
}
}
因此,您的代码可以转换为:
const int batchSize = 100;
contacts.ProcessInBatches(batchSize, DoSomething);