ConcurrentBag
является потокобезопасным, но ваш код не является:
if (!SystemNames.Contains(name))
{
SystemNames.Add(name);
}
Contains
будет выполняться потокобезопасным способом, тогда Add
также будет выполняться потокобезопасным способом, но у вас нет гарантии, что товар не был добавлен между ними.
Для ваших нужд я рекомендую использовать ConcurrentDictionary
.Просто игнорируйте значение, так как оно вам не понадобится.
var SystemNames = new ConcurrentDictionary<string, bool>();
Затем используйте метод TryAdd
, чтобы выполнить «если не содержит, то добавить» в одной атомарной операции:
SystemNames.TryAdd(name, true);