線程安全下的方法是?我知道ConcurrentDictionary提供了TryRemove方法,但我只是不喜歡爲我永遠不會使用的值的變量。這種方式線程安全
ConcurrentDictionary<int, int> myDict = new ConcurrentDictionary<int, int>();
if (myDict.ContainsKey(1))
((IDictionary<int, int>)myDict).Remove(1);
線程安全下的方法是?我知道ConcurrentDictionary提供了TryRemove方法,但我只是不喜歡爲我永遠不會使用的值的變量。這種方式線程安全
ConcurrentDictionary<int, int> myDict = new ConcurrentDictionary<int, int>();
if (myDict.ContainsKey(1))
((IDictionary<int, int>)myDict).Remove(1);
你的目標似乎是不再需要使用一個out
參數來提高代碼的清晰度。這是一個有效的擔憂,但使用Remove
是不正確的。
自己定義一個輔助方法:
static bool TryRemove<TKey, Value>(
this ConcurrentDictionary<TKey, Value> dict, TKey key) {
TValue value;
return dict.TryRemove(key, out value);
}
TryRemove暴露的一個原因。 – 2015-02-06 20:45:15
這是一個愚蠢的說法。 TryRemove是訪問您的數據的最安全的方式。你會得到True/False的回報,讓你知道你是否應該處理out變量。 – phillip 2015-02-06 20:46:21
如果你真的不喜歡在TryRemove後面放置變量,那麼只需將其範圍限制爲只對該調用有效。 – Katie 2015-02-06 20:50:14