У меня есть следующий метод:
public static IEnumerable<Dictionary<string, object>> GetRowsIter
(this SqlCeResultSet resultSet)
{
// Make sure we don't multi thread the database.
lock (Database)
{
if (resultSet.HasRows)
{
resultSet.Read();
do
{
var resultList = new Dictionary<string, object>();
for (int i = 0; i < resultSet.FieldCount; i++)
{
var value = resultSet.GetValue(i);
resultList.Add(resultSet.GetName(i), value == DBNull.Value
? null : value);
}
yield return resultList;
} while (resultSet.Read());
}
yield break;
}
Я просто добавил lock(Database)
, чтобы попытаться избавиться от некоторых проблем с совместимостью. Мне любопытно, будет ли yield return
освобождать блокировку на Database
, а затем снова заблокировать, когда она будет продолжена для следующей итерации? Или будет Database
оставаться заблокированным в течение всей продолжительности итерации?