C # Yield free a lock?

У меня есть следующий метод:

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;
    }

Я только что добавил блокировку (База данных) , чтобы попытаться избавиться от некоторых проблем с согласованностью. Однако мне любопытно, освободит ли yield return блокировку базы данных , а затем повторно заблокирует ее при переходе на следующую итерацию? Или База данных останется заблокированной на протяжении всей итерации?

31
задан Ben McCormack 5 January 2011 в 19:14
поделиться