Я пытаюсь порождать потоки в каждом цикле, используя копию значения в dict.Как выполнять параллельный параллельный параллельный динамический словарь?
Мое первое понимание было то, что 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
Поэтому я попытался клонировать kvp в foreach:
KeyValuePair<string, string> tmp = new KeyValuePair<string, string>(record.Key, record.Value);
но это делает тот же результат.
Я также пробовал его с System.Parallel.ForEach
, но это кажется необходимым значениям, которые не являются динамическими, что немного напоминает поезд для моего словаря.
Как я могу повторить мой словарь с помощью ниток?
Я не вижу, как код, который вы указали, будет работать вообще, учитывая, что вы не запускаете таймер ... и у вас есть 2 записи в словаре, а не 4, которые вы печатаете вне. Если вы можете создать короткую, но * полную * программу, демонстрирующую проблему, это действительно поможет. –
Во-первых, зачем писать 1/2/1/2, когда все записи dictio имеют значение 1? Затем, почему вы попытались поместить две записи диктофона с тем же ключом «sr»? Он сразу же бросил бы .. – quetzalcoatl
@quetzalcoatl Упс, второй sr должен был быть «2», чтобы продемонстрировать. – Alex