diff --git a/src/RepoM.Api/Git/DefaultRepositoryMonitor.cs b/src/RepoM.Api/Git/DefaultRepositoryMonitor.cs index 5c3e0b30..8f02506a 100644 --- a/src/RepoM.Api/Git/DefaultRepositoryMonitor.cs +++ b/src/RepoM.Api/Git/DefaultRepositoryMonitor.cs @@ -263,11 +263,13 @@ private void OnRepositoryObserverChange(Repository repository) private void DestroyRepositoryObserver(string path) { - if (_repositoryObservers.TryGetValue(path, out IRepositoryObserver observer)) + if (!_repositoryObservers.TryGetValue(path, out IRepositoryObserver? observer)) { - observer.Stop(); - _repositoryObservers.Remove(path); + return; } + + observer.Stop(); + _repositoryObservers.Remove(path); } private void OnRepositoryDeletionDetected(string repoPath) diff --git a/src/RepoM.Api/Git/FileRepositoryStore.cs b/src/RepoM.Api/Git/FileRepositoryStore.cs index babd39d3..6c0e97fb 100644 --- a/src/RepoM.Api/Git/FileRepositoryStore.cs +++ b/src/RepoM.Api/Git/FileRepositoryStore.cs @@ -30,7 +30,12 @@ public void Set(IEnumerable paths) } var file = GetFileName(); - var path = _fileSystem.Directory.GetParent(file).FullName; + var path = _fileSystem.Directory.GetParent(file)?.FullName; + + if (string.IsNullOrWhiteSpace(path)) + { + return; + } if (!_fileSystem.Directory.Exists(path)) { diff --git a/src/RepoM.App/App.xaml.cs b/src/RepoM.App/App.xaml.cs index b3b22069..f04a9a17 100644 --- a/src/RepoM.App/App.xaml.cs +++ b/src/RepoM.App/App.xaml.cs @@ -322,22 +322,25 @@ private static void StartModules(List modules) private static void StopModules(List modules) { - var allTasks = Task.WhenAll(modules.Select(async x => + var task = Task.Run(() => { - await x.StopAsync(); - - if (x is IAsyncDisposable asyncDisposable) - { - await asyncDisposable.DisposeAsync(); - } - else if (x is IDisposable disposable) - { - disposable.Dispose(); - } - })); - allTasks.GetAwaiter().GetResult(); - } + return Task.WhenAll(modules.Select(async module => + { + await module.StopAsync().ConfigureAwait(false); + + if (module is IAsyncDisposable asyncDisposable) + { + await asyncDisposable.DisposeAsync().ConfigureAwait(false); + } + else if (module is IDisposable disposable) + { + disposable.Dispose(); + } + })); + }); + task.ConfigureAwait(false).GetAwaiter().GetResult(); + } private static void UseRepositoryMonitor(Container container) { // var repositoryInformationAggregator = container.GetInstance();