public static async Task syncDirectory(PathChange change) { if (change.Mode != ChangeMode.Deep) return; var rfs = change.ReadFileSystem; var sourceEntries = rfs.scan(change.Source); var targetEntries = rfs.scan(change.Target); var all = sourceEntries.Concat(targetEntries).Distinct(); await Task.WhenAll(all.Select(str => Synchronizer.sync(change.nested(str)))); }