2011-08-05 22 views
1

試圖執行一個ConcurrentQueue防止一個項目被使用次數超出特定#更多。例如,我想要一個可以出隊10次的用戶對象,之後,用戶將被註銷並處理。如何防止物品被使用超過特定數量?

顯然,通過使用Dictionary並跟蹤每個對象的使用次數,以及ConcurrentQueue,很容易實現。然而,只是想知道是否有人有任何管理這個巧妙的想法?

+0

最簡單的將是創建你的對象是去是某種類型的(可數的實例),包含使用次數的隊列中的基礎類,並創建爲10,一旦降低了計數出列的包裝降爲零做你的邏輯,有可能是更好的方法來做到這一點,我認爲 –

+0

不幸的是,我使用的ConcurrentQueue目前被別人定義的,並且是一個接口類型,所以我不認爲我可以走這條路。 – esac

+0

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

回答

2

像這樣的東西在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... 
     } 
    } 
} 
+0

如果你會閱讀評論,你會看到他已經表示他不能這樣做,因爲我提出了這個確切的建議。 –

0

創建您自己的線程安全Queue<T>,就像天沒有C#4.0。並在其Dequeue方法中記錄使用次數。您無需修改​​該項目的原始類別/界面。您可以將另一個Dictionary<IFoo, int>作爲使用計數器。

相關問題