Добавление 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);

         });

0 ответов

Другие вопросы по тегам