マルチタスクでのDictionary作成で重複エラーが起きてしまう。
時間差で複数のタスクを実行しています。
タスクAがDictionaryを作成中にタスクBがDictionaryの作成を開始すると、
「同一のキーを含む項目が既に追加されています。」
と重複エラーが発生してしまいます。
タスクの開始時間の差を十分に開けて、各タスクのDictionary作成タイミングが重ならなければこのようなエラーは起きません。
インスタンスは別で作成しているのにDictionaryの重複エラーが起きてしまう原因はなぜでしょうか。
また、できればこの構成を変えず、時間差を開ける以外で回避策はあるでしょうか?
宜しくお願いします。
program.cs
var Task_A = Task.Factory.StartNew(() =>
{
Thread.Sleep(100);
DataAccsess dataAcs = new DataAcs();
});
var Task_B = Task.Factory.StartNew(() =>
{
Thread.Sleep(500);
DataAccsess dataAcs = new DataAcs();
});
DataAccsess.cs
Dictionary dic;
public DataAccsess()
{
var stateDic = new States();
this.dic = stateDic.GetStateDic();
/* その他処理 */
}
States.cs
Dictionary dic;
public Dictionary<string,string> GetStateDic()
{
dic = new Dictionary<string, string>()
dic.Add("State1", ConfigurationManager.AppSettings["State1Name"]);
dic.Add("State2", ConfigurationManager.AppSettings["State2Name"]);
/* 中略 */
dic.Add("State16", ConfigurationManager.AppSettings["State16Name"]);
return dic;
}