libgit2sharp를 사용하여 백그라운드에서 일부 git 작업을 수행하는 앱이 있습니다. 사용자가 특정 동작을 수행하면 git commit이 실행됩니다. 사용자가 버튼을 여러 번 빠르게 클릭하여 동시에 여러 커밋을 트리거 할 수 있습니다. 이 경우, 언젠가는 이러한 오류 중 하나가 발생합니다특정 사용자 작업이 git commit을 트리거합니다. 같은 디렉토리에있는 여러 작업이 잠기지 않고 오류가 발생하지 않도록하려면 어떻게합니까?
the index is locked; this might be due to a concurrent or crashed process
LibGit2Sharp.LockedFileException: failed to create locked file
이를 방지하는 올바른 방법은 무엇입니까? 이 문제를 일으키는 코드는 다음과 같습니다
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);
}
내가 잠금이 이미 존재하는 경우 확인하고 기다릴 수있는 몇 가지 방법이 있나요? 더 좋은 패턴이 있습니까?
가장 올바른 방법은 이벤트 수신과 처리를 분리하는 것입니다. 이벤트에서 처리기를 호출하지 마십시오. 단지 수신 된 이벤트를 대기열에 넣으십시오. 프로세스 또는 스레드 프로세스 이벤트를 하나씩 큐에서 분리합니다. – phd