什麼是最好的模式使數據集線程安全寫入?使數據集線程安全的C#
我可以找到的最好的谷歌搜索是'實施與鎖'包裝層'但乍一看這似乎相當混亂。
有人可以推薦/指向我一個很好的解決方案嗎?這似乎是一個已經在某個地方解決的問題。
編輯:我也需要綁定數據集到一個UI網格,這有點複雜的事情。
什麼是最好的模式使數據集線程安全寫入?使數據集線程安全的C#
我可以找到的最好的谷歌搜索是'實施與鎖'包裝層'但乍一看這似乎相當混亂。
有人可以推薦/指向我一個很好的解決方案嗎?這似乎是一個已經在某個地方解決的問題。
編輯:我也需要綁定數據集到一個UI網格,這有點複雜的事情。
「實現帶鎖的包裝層」是要走的路。
包裝層可能會使用特定於您的應用程序使用數據集的方式的鎖定。
試圖設計一類複雜的一個通用的解決方案作爲一個DataSet可能是註定要失敗的。
例如,枚舉屬性通常不會是線程安全的 - 因此只要任何調用方正在枚舉任何許多集合屬性(DataSet.Tables,DataTable.Rows,..),您都需要保持鎖定狀態。 )。
這真的很大程度上取決於所討論的數據。
如果你處理的整數或引用類型值,則可以Interlocked class優於服用鎖。否則,成功同步通常意味着在類中創建鎖定內部。
但是,另一種替代方法是使主數據集工作在不可變類型上。然後,您可以在單個線程中處理副本,並僅在主數據集內的替換值處提供同步。這可以避免鎖定每個線程的單個副本。
用鎖實現一個包裝層。認真。你不能繼承重要的方法,只要它們可用,你的線程安全就可以被破壞。
那麼,你也可以實現一組線程安全的擴展方法,並堅持這些方法,但只有當你不必將DataSet傳遞給第三方庫,它將直接訪問它。
對不起,數據集很混亂! –