如何停止将两个相同的ID添加到列表中?(C# 多线程)



我有一个可能很容易解决的问题,但由于某种原因我无法绕开我的头......

我有一个列表,其中包含一个包含一些信息的类。其中之一是 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 的问题的风险 - 这正是我所需要的。

相关内容

  • 没有找到相关文章

最新更新