É muito comum usar um objeto somente leitura estático privado para bloqueio em multiencadeamento. Eu entendo que privado reduz os pontos de entrada para o objeto de bloqueio, apertando o encapsulamento e, portanto, o acesso ao mais essencial.
Mas por que estático?
private static readonly object Locker = new object();
No final, o campo é usado apenas dentro da minha classe, e eu também poderia usar apenas este:
private readonly object Locker = new object();
Algum comentário?
ATUALIZAR:
Como exemplo, colei este código (apenas um exemplo). Eu poderia usar um armário estático ou não estático nisso e ambos funcionariam bem. Considerando a resposta abaixo, eu deveria definir meu armário dessa maneira? (Desculpe, tenho uma entrevista na próxima semana e preciso saber todos os detalhes :)
private readonly object Locker = new object();
E aqui está o 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();
}
obrigado
_service
e _waithandle
localizados? instância? estático? de outros? Isso poderia ser , por exemplo, sincronizar deliberadamente o acesso a um servidor remoto ...