KeyLocks
1.0.0
Execute o código com bloqueios com base em diferentes tipos de objetos, como strings, números e datas.
Bloquear seletivamente o código em valores específicos, não globalmente para todo o código de execução.
private static KeyLock<string> _keyLock = new KeyLock<string>();
public void Main()
{
Parallel.Invoke(
() => { UpdateData("entity-123", "First new value"); },
() => { UpdateData("entity-123", "Second new value"); }, // This will await line above
() => { UpdateData("another-entity-456", "Another new value"); },
() => { UpdateData("yet-another-entity-789", "Yet another new value"); });
}
private void UpdateData(string id, string value)
{
_keyLock.RunWithLock(id, () =>
{
// Execute locked code
});
}
Os métodos 1 e 2 executados dentro do Parallel.Invoke , que estão executando o modelo UpdateData , aguardarão um ao outro e não serão executados simultaneamente, enquanto todos os outros funcionarão em paralelo.
O tipo NameLock é um termo de mão curta para KeyLock<string> .
Padrão para ser sensível ao minúsculo, mas isso pode ser alterado passando StringComparer.InvariantCultureIgnoreCase como um argumento construtor.