Добавление Tuple в качестве потокобезопасного ввода в цикле Parallel.Foreach в C#
Мне нужна помощь с циклом Parallel.Foreach в C#. У меня такое ощущение, что иногда кортеж "result" перезаписывается другим параллельным потоком, поэтому нет правильного вывода. Это не часто случается, но иногда это выдает плохой результат.
Сценарий: сетевое устройство доступно, все отлично работает, выходные данные сохраняются в кортеже "result". Но потом, когда я продолжаю работать с "результатом", кортеж иногда пуст, хотя выходные данные хранятся там. Может ли быть так, что другой поток в параллельной обработке стирает "результат"? Могу ли я сделать его более потокобезопасным?
Tuple <string, int> result;
/*loop through all hosts and execute commands -> In paralel*/
Parallel.ForEach(devices, (hostname, state) =>
{
//because we have multithreading every thread must differentiate -> based on hostname (first value in list) - key is also hostname
device_checked_with_all_parameters.Add(cleaned_hostname, new List<string> { DateTime.Now.ToString("d.M.yyyy HH:mm:ss"), cleaned_hostname, "", "", "", "" });
//if stop is pushed break all threads
if (token.IsCancellationRequested)
{
canceled_loop = 1;
state.Break();
}
//PERFORM ACTION ON DEVICE - STORE OUTPUT IN RESULT
result = core.connect_to_device_and_perform_actions(device_checked_with_all_parameters[cleaned_hostname][1], config_vlan_ids_based_on_type);
});