J'ai une application qui utilise libgit2sharp pour faire des actions git en coulisses. Lorsqu'un utilisateur effectue une action spécifique, un commit git est déclenché. Il est possible que l'utilisateur clique sur un bouton plusieurs fois rapidement, déclenchant plusieurs validations en même temps. Lorsque cela se produit, quelque temps une de ces erreurs se produit:Une action utilisateur spécifique déclenche une validation git. Comment puis-je empêcher plusieurs actions sur le même répertoire de ne pas verrouiller et de lancer une erreur?
the index is locked; this might be due to a concurrent or crashed process
LibGit2Sharp.LockedFileException: failed to create locked file
Quelle est la bonne façon d'éviter cela? Le code qui fait cela ressemble à ceci:
using (Repository repo = new Repository(workingDirectory))
{
var stat = repo.RetrieveStatus();
if (!stat.IsDirty)
{
return;
}
Commands.Stage(repo, "*");
Signature committer = new Signature(email, email, DateTime.UtcNow);
repo.Commit("commit!", committer, committer);
}
Est-il possible que je peux vérifier si un verrou existe déjà et attendre? Y a-t-il un meilleur modèle?
La manière la plus correcte consiste à séparer la réception et la gestion des événements. Sur un événement n'appelez pas handler - mettez simplement l'événement reçu dans une file d'attente. Séparez les processus (ou threads) de l'événement de la file d'attente un par un. – phd