Hashtable.Synchronized(new HashTable())將HashTable封裝成一個線程安全的SyncHashTable。 但該方法在枚舉整個集合時本質上不是一個線程安全的過程,即使某個集合已經同步,其他線程仍可以修改該集合,這會導致枚舉數引發異常。 若要確保枚舉過程中的線程 ...
Hashtable.Synchronized(new HashTable())將HashTable封裝成一個線程安全的SyncHashTable。
但該方法在枚舉整個集合時本質上不是一個線程安全的過程,即使某個集合已經同步,其他線程仍可以修改該集合,這會導致枚舉數引發異常。
若要確保枚舉過程中的線程安全,可以在整個枚舉期間鎖定集合,或者捕獲由其他線程進行更改所導致的異常。可以使用Hashtable.SyncRoot在整個枚舉過程中鎖定集合。
var myCollection = new HashTable(); lock(myCollection.SyncRoot) { foreach(var item in myCollection) // 枚舉過程 { //insert your code here } }