我有一个可能很容易解决的问题,但由于某种原因我无法绕开我的头......
我有一个列表,其中包含一个包含一些信息的类。其中之一是 ID,它从 0 开始,每次提交时增加 1。
运行多个线程时,它们会提交同一 ID 的不同变体。这应该是不可能的,因为它会在我真正调用 List<>((.Add 之前检查是否可以添加它。
关于如何避免这种情况的任何建议?
主要方法:
public static bool AddToList(List<ExampleItem> itemList, List<Xxx> xxx, ExampleItem newItem)
{
ExampleItem lastItem = itemList[itemList.Count - 1];
// We must validate the old item one more time before we progress. This is to prevent duplicates.
if(Validation.ValidateIntegrity(newItem, lastItem))
{
itemList.Add(newItem);
return true;
}
else
return false;
}
验证方法:
public static bool ValidateBlockIntegrity(ExampleItem newItem, ExampleItem lastItem)
{
// We check to see if the ID is correct
if (lastItem.id != newItem.id - 1)
{
Console.WriteLine("ERROR: Invalid ID. It has been rejected.");
return false;
}
// If we made it this far, the item is valid.
return true;
}
感谢@mjwills的建议,无论谁删除了他们的答案,我能够找到一个好方法。
我现在正在使用ConcurrentDictionary<long, ExampleClass>
这意味着我可以索引和添加,而不会冒重复 ID 的问题的风险 - 这正是我所需要的。