static List<int> numbers = new List<int>();
static void Main(string[] args)
{
foreach(var number in GetNumbers())
{
if (number == 1)
{
Thread t = new Thread(() =>
{
numbers.Add(234567);
});
t.Start();
}
Console.WriteLine(number);
}
}
public static IEnumerable<int> GetNumbers()
{
for(int i =0; i <=10;i++)
{
numbers.Add(i);
}
foreach (var number in numbers)
{
yield return number;
}
}
在上面的示例中,我使用yield迭代集合,并在集合中添加了一个项目以获取更新的数字。
我理解修改我们正在迭代的集合抛出集合修改的异常,但是使用IEnumerable,我得到延迟执行,我应该能够添加到主集合中,因为yield会逐个返回数据。
据我所知,删除项目可能会有问题,但添加项目到迭代集合应该不是问题。但是,如果不允许我在上面的示例中看到(即使是延迟执行),如果我有这样的情况怎么办?
&#34;有一个庞大的集合,很多消费者正在使用IEnumerable和yield迭代它。他们拿走每件商品,用这个商品做一些处理。
如果在主列表或集合中添加了任何新项目,那么客户也应该获得最新项目。