La acción específica del usuario desencadena una confirmación de git. ¿Cómo puedo evitar que múltiples acciones en el mismo directory no se bloqueen y arrojen un error?

Tengo una aplicación que usa libgit2sharp para hacer algunas acciones de git detrás de escena. Cuando un usuario realiza una acción específica, se activa una confirmación de git. Es posible que el usuario pueda hacer clic en un button varias veces rápidamente, lo que activa varias confirmaciones al mismo time. Cuando esto sucede, en algún momento ocurre uno de estos errores:

the index is locked; this might be due to a concurrent or crashed process the index is locked; this might be due to a concurrent or crashed process LibGit2Sharp.LockedFileException: failed to create locked file

¿Cuál es la forma correcta de prevenir esto? El código que causa esto se ve así:

 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); } 

¿Hay alguna forma de que pueda verificar si ya existe un locking y esperar? ¿Hay un mejor patrón?

Necesita alguna manera de limitar las pulsaciones de teclas adicionales hasta que se complete el primer command. Hay muchas maneras posibles de hacerlo, pero solo el código que se muestra no brinda suficiente información para responder completamente; la solución debe ser en el momento en que usted llame a esta rutina.

Decida si desea ignorar las pulsaciones de teclas adicionales mientras está en curso un command, o si desea ponerlas en queue (guárdelas y ejecútelas en order después de que se complete el command original). Para simplificar, y sobre la base de que se trata de varias prensas, probablemente comenzaría simplemente ignorando las prensas adicionales. Otra opción sería desactivar la key después de presionarla, hasta que el command finalice.

Si no puede encontrar la forma de get comentarios sobre la ejecución del compromiso, un método raro para que las cosas funcionen temporalmente sería simplemente ponerle un timer y soltar varios commands hasta que el timer finalice, tal vez 5 segundos o más. ¿asi que? Pero eso debería ser una solución rápida si tiene usuarios que usan el producto en la actualidad, mientras encuentra una solución más permanente.