class YieldBreak
{
static IEnumerable<int> CountWithTimeLimit(DateTime limit) //当前时间为参数
{
for (int i = 1; i <= 100; i++) //i初始化时 不掉用i++
{
if (DateTime.Now >= limit)
{
yield break; //执行这句 就退出循环 foreach就不执行
}
yield return i; //返回i,中断执行
}
}
static void Main()
{
DateTime stop = DateTime.Now.AddSeconds(2); //stop 0001/1/1 0:00:00 当前时间 年/月/日 时间 +2s
foreach (int i in CountWithTimeLimit(stop))
{
Console.WriteLine("Received {0}", i);
Thread.Sleep(300); //休眠0.3s
}
}
}
输出
Received 1
Received 2
Received 3
Received 4
Received 5
Received 6
Received 7