当其中一个迭代器块内发生异常时,是否有任何方法可以将yield iterator继续到下一个项目?
目前无效:
Boolean result;
while (true)
{
try
{
result = enumerator.MoveNext(); //Taken from a yield created enumerable
if (!result) break;
}
catch (Exception ex)
{
Console.WriteLine("CATCHED...");
continue;
}
}
答案 0 :(得分:3)
不,没有。生成的C#迭代器代码不支持抛出异常。如果抛出异常,则MoveNext操作将无法完成,并且从生成的迭代器代码的角度来看,下一个调用将从同一位置重放。
答案 1 :(得分:2)
Linq to events,又名RX,又名IObservable明确支持错误:http://msdn.microsoft.com/en-us/library/dd783449(VS.100).aspx
在http://themechanicalbride.blogspot.com/2009/07/introducing-rx-linq-to-events.html
上查看