我正在尝试使用字典中的值的副本在每个循环中生成线程。
我最初的理解是,这foreach
将创建一个新的范围,并导致:
Dictionary<string, string> Dict = new Dictionary<string, string>() { { "sr1", "1" }, { "sr2", "2" } };
foreach (KeyValuePair<string, string> record in Dict) {
new System.Threading.Timer(_ =>
{
Console.WriteLine(record.Value);
}, null, TimeSpan.Zero, new TimeSpan(0, 0, 5));
}
哪个写
1
2
2
2
而不是(预期):
1
2
1
2
所以我尝试在foreach中克隆kvp:
KeyValuePair<string, string> tmp = new KeyValuePair<string, string>(record.Key, record.Value);
但这会产生相同的结果。
我也试过了,System.Parallel.ForEach
但这似乎需要不是动态的值,这对我的字典来说有点像火车粉碎。
如何使用线程遍历我的字典?