En realidad, simplemente realizar un lock
en un solo lugar en el DataTable o DataRow en realidad no es hacer nada. Un aspecto importante para recordar al usar los bloqueos Monitor
(que es lo que es un bloque lock
) es que bloquear un objeto no le hace nada; esa es una de las razones por las que algunos defienden el uso de objetos de bloqueo dedicados en lugar de bloquear el recurso en sí, ya que lo obliga a darse cuenta de que debe realizar el bloqueo (y en el mismo objeto) cada vez que maneja el recurso.
Dicho esto, es una mejor idea para bloquear toda la DataTable
, como el propio almacenamiento de datos está allí (los objetos DataRow
internamente contienen solamente un desplazamiento en el DataTable
en cuanto a dónde recuperar los datos). Debido a esto, incluso si sincroniza el acceso a filas individuales, la actualización simultánea de dos filas ocasionará que actualice el mismo mecanismo de almacenamiento de datos de manera no sincronizada.
Aquí hay un conflicto entre ver tipos internos como un "recuadro negro" y bloquear solo lo que necesita (que, en este caso, podría llevarlo a una conclusión errónea de solo bloquear la fila) y tratar de obtener información en el funcionamiento interno del tipo y confiando en los detalles de implementación que podrían cambiar.
El resultado es que, en este momento, debe bloquear todo el DataTable
para evitar la actualización del sistema interno de almacenamiento de datos de manera no sincronizada.
Respuesta muy perspicaz, y puedo ver por qué sentiste la necesidad de señalar cómo funciona el mecanismo de 'bloqueo' ... Me di cuenta de que bloquear no hace nada * a * un objeto; Supongo que una mejor manera de haber redactado mi pregunta hubiera sido "¿Necesito sincronizar las operaciones de actualización por fila o por tabla?" En cualquier caso, es claro para mí en este punto que debo sincronizar las actualizaciones a * cualquier * fila en toda la tabla, ya sea bloqueando la tabla o un "bloqueo de tabla" dedicado (en este caso, creo que las 'Filas. El objeto SyncRoot' sirve bien para ese propósito, en realidad). –