2015-02-06 105 views
0

線程安全下的方法是?我知道ConcurrentDictionary提供了TryRemove方法,但我只是不喜歡爲我永遠不會使用的值的變量。這種方式線程安全

ConcurrentDictionary<int, int> myDict = new ConcurrentDictionary<int, int>(); 

if (myDict.ContainsKey(1)) 
    ((IDictionary<int, int>)myDict).Remove(1); 
+5

TryRemove暴露的一個原因。 – 2015-02-06 20:45:15

+1

這是一個愚蠢的說法。 TryRemove是訪問您的數據的最安全的方式。你會得到True/False的回報,讓你知道你是否應該處理out變量。 – phillip 2015-02-06 20:46:21

+0

如果你真的不喜歡在TryRemove後面放置變量,那麼只需將其範圍限制爲只對該調用有效。 – Katie 2015-02-06 20:50:14

回答

4

你的目標似乎是不再需要使用一個out參數來提高代碼的清晰度。這是一個有效的擔憂,但使用Remove是不正確的。

自己定義一個輔助方法:

static bool TryRemove<TKey, Value>(
     this ConcurrentDictionary<TKey, Value> dict, TKey key) { 
TValue value; 
return dict.TryRemove(key, out value); 
} 
+1

喜歡它比CLR給我的更好 – BKS 2015-02-06 20:59:23

+1

@johnsmith你的意思是.NET框架,而不是CLR。 – Servy 2015-02-06 21:12:05

+0

@Servy是的我的意思是.NET – BKS 2015-02-07 02:11:35