下面是一个示例代码,用于使用我在google搜索时在几个地方找到的yield关键字从数据库中检索数据:
public IEnumerable
我是否认为在此示例代码中,如果我们不遍历整个datareader,连接将不会被关闭?
如果我理解正确的收益,这是一个不会关闭连接的例子.
foreach(object obj in ExecuteSelect(commandText)) { break; }
对于可能不是灾难性的数据库连接,我想GC最终会将其清理干净,但是如果不是连接它会是一个更关键的资源呢?
编译器合成的迭代器实现了IDisposable,当foreach循环退出时,它会调用.
Iterator的Dispose()方法将在早期退出时清除using语句.
只要在foreach循环中使用迭代器,使用()块或以其他方式调用Dispose()方法,就会发生迭代器的清理.