I have a piece of code that I am not feeling comfortable.
- I don't want to block the UI
- Read operation works synchronously (reading may broke 50 ms rule)
- Save operation supports async (returns
Task
) - I have to await
SaveChanges
(so operation could be completed beforeDispose
)
public Task AddToMyProject(string directory) {
return Task.Run(async () => {
if (!Directory.Exists(directory)) return;
using (var context = _contextFactory.CreateContext()) {
var existing = context.WatchDirectories.FirstOrDefault(wd => wd.Directory == directory);
if (existing == null) {
var childWatchers = context.WatchDirectories.Where(wd => wd.Directory.StartsWith(directory));
foreach (var watchDirectory in childWatchers) {
context.Delete(watchDirectory);
RemoveDirectoryWatcher(watchDirectory.Directory);
}
context.Insert(new WatchDirectory { Directory = directory });
await context.SaveChanges()
.ContinueWith(t => AddDirectoryWatcher(directory));
}
}
});
}
I just want to know if there is a better approach for this.