O retorno de rendimento em c # thread-safe?

Eu tenho o seguinte trecho de código:

private Dictionary<object, object> items = new Dictionary<object, object>;
public IEnumerable<object> Keys
{
    get
    {
        foreach (object key in items.Keys)
        {
            yield return key;
        }
    }
}

Isso é seguro para threads? Se não tenho que colocar umlock em torno do loop ou oyield return?

Aqui está o que eu quero dizer:

Thread1 acessa oKeys propriedade enquanto Thread2 adiciona um item ao dicionário subjacente. Thread1 é afetado pelo adicionar de Thread2?

questionAnswers(6)

yourAnswerToTheQuestion