4
爲什麼這個鎖定測試不起作用?它拋出一個異常吼叫Console.Write該集合被修改....爲什麼這個鎖定語句不起作用?
static List<string> staticVar = new List<string>();
static void Main(string[] args)
{
Action<IEnumerable<int>> assyncMethod = enumerator =>
{
lock (staticVar)
foreach (int item in enumerator)
staticVar.Add(item.ToString());
};
assyncMethod.BeginInvoke(Enumerable.Range(0, 500000), null, null);
Thread.Sleep(100);
Console.Write(staticVar.Count());
foreach (string item in staticVar)
{
}
}
只集合或所有類型前加一個鎖? – Alexandre 2010-05-20 17:27:19
鎖的一個要點是,如果鎖在其他地方被鎖定,任何東西都不能進入鎖。如果不在周圍,該鎖可以對大塊代碼沒有影響。鎖必須包裝使用同步變量的每個代碼段。 – Martin 2010-05-20 17:31:42