我有以下的代碼塊:C#中的yield return是否是線程安全的?
private Dictionary<object, object> items = new Dictionary<object, object>;
public IEnumerable<object> Keys
{
get
{
foreach (object key in items.Keys)
{
yield return key;
}
}
}
這是線程安全的?如果沒有,我必須把lock
圍繞循環或yield return
?
這裏是我的意思是:
線程1訪問Keys
財產,而線程2增加了一個項目底層字典。 Thread1是否受到Thread2的影響?
你的第二爲例將鎖定,返回一個枚舉然後解鎖。 你將在解鎖後迭代。 – Guillaume 2009-09-04 14:14:14
哦,你是對的。我只注意到這是一個不好的例子。我將編輯該問題。 – Albic 2009-09-04 14:22:17
只是爲了說明一點:通過鎖定線程安全性非常高,因此除非明確要求,否則自動鎖定每個動作都沒有意義。 – 2009-09-04 16:47:27