1

dict の値のコピーを使用して、for each ループでスレッドを生成しようとしています。

私の最初の理解では、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が、動的ではない値が必要なようです。これは、私の辞書にとってはちょっと面倒です。

スレッドを使用して Dictionary を反復処理するにはどうすればよいですか?

4

1 に答える 1