KeyLocks
1.0.0
Запустите код с замками на основе различных типов объектов, таких как строки, числа и даты.
Селективно блокируйте код на определенных значениях, а не глобально для всех выполняющихся кода.
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
});
}
Метод 1 и 2 , выполненные внутри Parallel.Invoke , которые выполняют UpdateData -Method, будут ждать друг друга и не работать одновременно, в то время как все остальные будут работать параллельно.
Тип NameLock -это короткий термин для KeyLock<string> .
По умолчанию по умолчанию быть чувствительным к случаям, но это может быть изменено, передавая StringComparer.InvariantCultureIgnoreCase как конструктор-аргумент.