試圖執行一個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
字典是在這種情況下你最好的選擇,在一些檢查字典的使用計數,並相應做邏輯的其餘部分包裹出列。與你的對象相比,詞典將會非常小(明智的記憶)(除非你有很多對象)。 –