KeyLocks
1.0.0
Ejecute código con bloqueos basados en diferentes tipos de objetos, como cadenas, números y fechas.
Bloquear el código selectivamente en valores específicos, no a nivel mundial para todo el código de ejecución.
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
});
}
El método 1 y 2 ejecutado dentro del Parallel.Invoke , que está ejecutando el metro UpdateData , se esperarán y no se ejecutarán simulturadamente, mientras que todos los demás se ejecutarán en paralelo.
El tipo de NameLock es un término de mano corta para KeyLock<string> .
El valor predeterminado es ser sensible al caso, pero eso se puede cambiar al pasar StringComparer.InvariantCultureIgnoreCase como un constructor-argumento.