Я пытаюсь выяснить, почему написанный мной параллельный код пропускает некоторые строки, которые я пытаюсь искать параллельно.
Вот что у меня есть - StringCollection - это словарь.С ключом, являющимся хэшем и значением некоторой строки.Всего есть четыре словаря, которые нужно искать.- InputStrings [] - это массив строк, точнее 10, которые мне нужно искать.
В моем коде у меня есть
Paralle.Foreach(InputStrings,currentString =>
{
int key = some hashing function on currentString;
if(SearchCollection(key))// boolean result
{
Console.WriteLine("Found:"+key);
}
else
{
Console.WriteLine("Not Found:"+key);
}
});
Как только я выполню это, я найду 8 или9 ключей, и пропустите один или два ключа.Я знаю, что коллекция содержит все ключи, которые я пытаюсь найти.Поиск ключа модифицируется внутри функции для дальнейшего поиска при определенных условиях.То есть ключ модифицируется и передается в некоторый подсловарь для поиска.
Таким образом, я поднимаю следующие пункты:
Означает ли это, что потоки выходят до завершения?Нужно ли устанавливать блокировки над моим методом SearchCollection или внутри моего метода SearchCollection?Поскольку я использую одну коллекцию для всех потоков, TPL заботится о блокировке или создает копии самой коллекции, которую я пытаюсь найти?
Любая помощь очень важна.Спасибо