1

我对流量感到困惑。我有一个学生对象列表。

List<Student> StudentLists;

最初我将在列表中有 10 个学生对象。

C# 4.0 winform 中有一个按钮,当我单击该按钮时,

我需要从列表中取出前 3 个学生对象并调用 wcf 服务并将这三个学生对象发送到 wcf 服务。

我已经实现了 wcf 回调功能。

处理完网络服务后,我会得到这 3 个学生对象的回调结果。

每次回电可能会在不同的时间出现。

一旦我从 web 服务获得所有三个回调结果,我想获取下 3 个可用的学生对象并执行相同的 web 服务调用......

我想这样做,直到它处理完列表中的所有 10 个项目。

但我知道如何每次从列表中获取 3 个对象。这就像分页。

var students = StudentLists.Skip(skip).Take(3).ToArray();

但是我在每次单击按钮时都这样做。在每个按钮单击中,我将获取接下来的 3 个对象。

有没有什么方法可以在不点击按钮的情况下完成所有这些步骤?

4

1 回答 1

3

似乎您想批量处理学生,如果是这种情况,您可以编写一个扩展方法来执行此操作:

public static IEnumerable<IEnumerable<T>> Batch<T>(this IEnumerable<T> items, int batchSize)
{
    return items.Select((item, inx) => new { item, inx })
                .GroupBy(x => x.inx / batchSize)
                .Select(g => g.Select(x => x.item));
}

用法:

foreach (var batch in StudentLists.Batch(3))
{
      //Do something with batch
      //Process
      //Get result etc...
}
于 2013-06-07T10:15:34.707 回答