我需要创建一个自定义的并发更新列表。可以将更新添加到列表中或替换现有的更新(通过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;
}
}
}