自定义实施并发列表

时间:2016-01-12 08:27:26

标签: c# .net concurrency locking

我需要创建一个自定义的并发更新列表。可以将更新添加到列表中或替换现有的更新(通过id键)。可以通过2种方法从列表中检索项目:获取第一个更新或获取第一个静默更新。

我尝试使用现有的Concurrent集合,但决定通过使用锁定对通用List的访问来创建自己的集合。

我的问题是:有更好的方法吗?请注意,列表可能永远不会包含十几个项目,并且不会被密集使用,因此性能不是问题。

 internal class UpdatesCollection
{
    private List<Update> updatesList;
    private object _lock = new object();

    public UpdatesCollection()
    {
        updatesList = new List<Update>();
    }

    public void InsertOrReplace(Update update)
    {
        lock (_lock)
        {
            var index = updatesList.FindIndex(u => u.PackageId == update.PackageId);
            if (index == -1)
            {
                updatesList.Add(update);
            }
            else {
                updatesList[index] = update;
            }
        }
    }

    public Update First()
    {
        lock (_lock)
        {
            var update = updatesList.FirstOrDefault();
            if (update != null)
            {
                updatesList.RemoveAt(0);
            }

            return update;
        }
    }

    public Update FirstSilent()
    {
        lock (_lock)
        {
            var index = updatesList.FindIndex(u => u.Silent);
            if (index != -1)
            {
                var update = updatesList[index];
                updatesList.RemoveAt(index);
                return update;
            }

            return null;
        }
    }
}

0 个答案:

没有答案