KeyLocks
1.0.0
Exécutez du code avec des verrous en fonction de différents types d'objets, comme des chaînes, des nombres et des dates.
Verrouillez sélectivement le code sur des valeurs spécifiques, et non globalement pour tous les code d'exécution.
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
});
}
Les méthodes 1 et 2 exécutées à l'intérieur du Parallel.Invoke , qui exécutent la méthode UpdateData , s'attendra et ne s'exécuteront pas simultanément, tandis que tous les autres fonctionneront en parallèle.
Le type NameLock est un terme à court terme pour KeyLock<string> .
Il est par défaut sensible à la casse, mais cela peut être modifié en passant par StringComparer.InvariantCultureIgnoreCase en tant que constructeur-argument.