试图执行一个ConcurrentQueue
防止一个项目被使用次数超出特定#更多。例如,我想要一个可以出队10次的用户对象,之后,用户将被注销并处理。如何防止物品被使用超过特定数量?
显然,通过使用Dictionary
并跟踪每个对象的使用次数,以及ConcurrentQueue
,很容易实现。然而,只是想知道是否有人有任何管理这个巧妙的想法?
试图执行一个ConcurrentQueue
防止一个项目被使用次数超出特定#更多。例如,我想要一个可以出队10次的用户对象,之后,用户将被注销并处理。如何防止物品被使用超过特定数量?
显然,通过使用Dictionary
并跟踪每个对象的使用次数,以及ConcurrentQueue
,很容易实现。然而,只是想知道是否有人有任何管理这个巧妙的想法?
像这样的东西在Java中:
interface Dequeable
{
public int dequed();
}
class ConcurrentQueueImpl extends ConcurrentQueue
{
..................
.................
@override
public Dequeable deque()
{
Dequeable obj=.................;
**if(obj.dequed()>=10)**
{
// dispose off obj
return null;
}
return obj;
}
}
class SampleDequeableClass implements Dequeable
{
private int dequedCounter=0;
public int dequed()
{
dequedCounter++;
if(dequedCounter>=10)
{
// log off this object...
}
}
}
如果你会阅读评论,你会看到他已经表示他不能这样做,因为我提出了这个确切的建议。 –
创建您自己的线程安全Queue<T>
,就像天没有C#4.0。并在其Dequeue
方法中记录使用次数。您无需修改该项目的原始类别/界面。您可以将另一个Dictionary<IFoo, int>
作为使用计数器。
最简单的将是创建你的对象是去是某种类型的(可数的实例),包含使用次数的队列中的基础类,并创建为10,一旦降低了计数出列的包装降为零做你的逻辑,有可能是更好的方法来做到这一点,我认为 –
不幸的是,我使用的ConcurrentQueue目前被别人定义的,并且是一个接口类型,所以我不认为我可以走这条路。 – esac
字典是在这种情况下你最好的选择,在一些检查字典的使用计数,并相应做逻辑的其余部分包裹出列。与你的对象相比,词典将会非常小(明智的记忆)(除非你有很多对象)。 –