次のコードがあります。
Dictionary<string, WSResponse> responseDictionary = new Dictionary<string, WSResponse>();
List<Task> taskList = new List<Task>();
foreach (string ID in IDs)
{
string localID = ID;
Task newTask = Task.Factory.StartNew(() =>
{
WSResponse response = Query.GetListFor(localID);
responseDictionary.Add(localID, response);
});
taskList.Add(newTask);
}
Task.WaitAll(taskList.ToArray());
このコードが実行されているサーバーで、IT チームはサーバー監視ソフトウェアを使用しており、そのソフトウェアunsafe static Dictionary
が が渡されていることを報告していると言われました。私の推測では、Task 内で Dictionary を使用すると、Dictionary は安全でないポインターとして Task スレッドに渡されます。一方で、私はこれを完全に間違っているかもしれません。これについて話している信頼できる情報源を見つけようとしましたが、失敗しました。この場合、ランタイムが何をするのか説明できる人はいますか?
ところで:とにかくDictionary
を aに交換しているConcurrentDictionary
ので、アラームは必要ありません。