Estoy implementando una clase que se utilizará al mismo tiempo desde varios subprocesos. La mayoría de las propiedades obtienen y configuran tipos primitivos que la clase Interbloqueada puede manejar adecuadamente. La clase incluye una propiedad Guid. Esto no es tan simple de implementar de una manera segura para subprocesos. ¿Es así como implementarías la propiedad? Gracias por adelantado.¿Es esta la manera correcta de implementar una propiedad Guid de lectura/escritura segura para subprocesos?
private Byte[] _activityId;
public Guid ActivityId
{
get { return new Guid(this._activityId); }
set
{
Byte[] bytes = value.ToByteArray();
Interlocked.Exchange(ref this._activityId, bytes);
}
}
ACTUALIZACIÓN: Así que la única solución propuesta hasta este punto no incluye el uso de cualquier clase o construcciones "Threading". Así que voy a plantear la pregunta que ya he planteadas en los comentarios:
Mi opinión es que los tipos de referencia/valores primitivos asignaciones son atómicas embargo Interlocked garantizará el cambio se propaga a todas las roscas. Si pudiéramos simplemente asignar el valor, ¿por qué Interlocked expone las API para intercambiar tipos de referencia y valores primitivos?
Las asignaciones de los tipos de referencia son atómicas; no necesitas 'Enclavamiento'. – SLaks
Es muy posible que me falta algo aquí, pero como las Guías son tipos de valores, ¿cuál es exactamente el problema aquí? –
¿Cuál es el punto de tener una propiedad de respaldo 'byte []' y una propiedad 'Guid' pública? ¿Cómo se usará este código? –