Thread Safe Properties en C #
Estoy tratando de crear propiedades seguras para subprocesos en C # y quiero asegurarme de que estoy en el camino correcto; esto es lo que he hecho:
private readonly object AvgBuyPriceLocker = new object();
private double _AvgBuyPrice;
private double AvgBuyPrice
{
get
{
lock (AvgBuyPriceLocker)
{
return _AvgBuyPrice;
}
}
set
{
lock (AvgBuyPriceLocker)
{
_AvgBuyPrice = value;
}
}
}
Leyendo esta publicación, parecería que esta no es la forma correcta de hacerlo -
C # seguridad de rosca con get / set
sin embargo, este artículo parece sugerir lo contrario,
http: //www.codeproject.com/KB/cs/Synchronized.asp
Alguien tiene una respuesta más definitiva?
Editar
La razón por la que quiero hacer el Getter / Setter para esta propiedad es b / c. Realmente quiero que active un evento cuando está configurado, por lo que el código sería así:
public class PLTracker
{
public PLEvents Events;
private readonly object AvgBuyPriceLocker = new object();
private double _AvgBuyPrice;
private double AvgBuyPrice
{
get
{
lock (AvgBuyPriceLocker)
{
return _AvgBuyPrice;
}
}
set
{
lock (AvgBuyPriceLocker)
{
Events.AvgBuyPriceUpdate(value);
_AvgBuyPrice = value;
}
}
}
}
public class PLEvents
{
public delegate void PLUpdateHandler(double Update);
public event PLUpdateHandler AvgBuyPriceUpdateListener;
public void AvgBuyPriceUpdate(double AvgBuyPrice)
{
lock (this)
{
try
{
if (AvgBuyPriceUpdateListener!= null)
{
AvgBuyPriceUpdateListener(AvgBuyPrice);
}
else
{
throw new Exception("AvgBuyPriceUpdateListener is null");
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
¡Soy bastante nuevo para hacer que mi hilo de código sea seguro, así que siéntase libre de decirme si lo estoy haciendo de una manera totalmente incorrecta!
Ser