Es muy común utilizar un objeto de solo lectura estático privado para bloquear en subprocesos múltiples. Entiendo que privado reduce los puntos de entrada al objeto de bloqueo al apretar la encapsulación y por lo tanto el acceso a lo más esencial.
¿Pero por qué estática?
private static readonly object Locker = new object();
Al final, el campo solo se usa dentro de mi clase, y también podría usar esto en su lugar:
private readonly object Locker = new object();
¿Algún comentario?
ACTUALIZAR:
Como ejemplo, he pegado este código (solo un ejemplo). Podría usar un casillero estático o no estático en esto y ambos funcionarían bien. Teniendo en cuenta la respuesta a continuación, ¿debería definir mi casillero de esta manera? (Lo siento, tengo una entrevista la próxima semana y necesito conocer todos los detalles :)
private readonly object Locker = new object();
Y aquí está el código:
private int _priceA;
private int _priceB;
private EventWaitHandle[] _waithandle;
private readonly IService _service;
//ctor
public ModuleAViewModel(IService service)
{
_service = service;
_modelA = new ModelA();
_waithandle = new ManualResetEvent[2];
_waithandle[0] = new ManualResetEvent(false);
_waithandle[1] = new ManualResetEvent(false);
LoadDataByThread();
}
private void LoadDataByThread()
{
new Thread(() =>
{
new Thread(() =>
{
lock (Locker)
{
_priceA = _service.GetPriceA();
}
_waithandle[0].Set();
}).Start();
new Thread(() =>
{
lock (Locker)
{
_priceB = _service.GetPriceB();
}
_waithandle[1].Set();
}).Start();
WaitHandle.WaitAll(_waithandle);
PriceA = _priceA;
PriceB = _priceB;
}).Start();
}
Gracias
_service
y _waithandle
ubicados? ¿ejemplo? ¿estático? ¿otro? Eso podría , por ejemplo, sincronizar deliberadamente el acceso a un servidor remoto ...