Я пытаюсь создать потокобезопасные свойства в С#, и я хочу убедиться, что я на правильном пути - вот что я сделал -
private readonly object AvgBuyPriceLocker = new object();
private double _AvgBuyPrice;
private double AvgBuyPrice
{
get
{
lock (AvgBuyPriceLocker)
{
return _AvgBuyPrice;
}
}
set
{
lock (AvgBuyPriceLocker)
{
_AvgBuyPrice = value;
}
}
}
Читая это сообщение, казалось бы, это не правильный способ сделать это -
Безопасность потока С# с get/set
однако, эта статья, кажется, предлагает иначе,
http://www.codeproject.com/KB/cs/Synchronized.aspx
Кто-нибудь имеет более окончательный ответ?
Редактировать:
Причина, по которой я хочу сделать Getter/Setter для этого свойства, это b/c. Я действительно хочу, чтобы он запускал событие, когда оно установлено, поэтому код действительно будет таким:
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);
}
}
}
}
Я новичок в обеспечении безопасности потока кода, поэтому, пожалуйста, не стесняйтесь говорить мне, если я собираюсь сделать это совершенно неправильно!
Будет