下面是一个示例代码,而周围的Googling检索使用,我在几个地方发现yield关键字数据库中的数据:使用yield来遍历datareader可能不会关闭连接?
public IEnumerable<object> ExecuteSelect(string commandText)
{
using (IDbConnection connection = CreateConnection())
{
using (IDbCommand cmd = CreateCommand(commandText, connection))
{
connection.Open();
using (IDbDataReader reader = cmd.ExecuteReader())
{
while(reader.Read())
{
yield return reader["SomeField"];
}
}
connection.Close();
}
}
}
我是在想,在此示例代码更正,连接不会如果我们不遍历整个数据读取器,请关闭它?
这里是不会关闭连接,如果我理解正确的话产生一个例子..
foreach(object obj in ExecuteSelect(commandText))
{
break;
}
对于可能不会是灾难性的一个数据库连接,我假设GC将清理最后,但如果不是连接而是更重要的资源呢?