public WalkerThread(FileSystemDirectoryWalker walker, Func <WalkerItem, Task> callback) : base(null) { _walker = walker; _callback = callback; _loopTask = Task.Factory.StartNew( Loop, _cancellationTokenSource.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default); }
private static async IAsyncEnumerable <FileSystemWalkerEntry> EnumerateAllFiles( ISingletonFileSystem singletonFileSystem, FileHandle rootFileHandle) { var directoryWalker = new FileSystemDirectoryWalker(singletonFileSystem, rootFileHandle); await foreach (var directory in directoryWalker) { foreach (var entries in directory.Entries) { yield return(new FileSystemWalkerEntry(entries.FileHandle, entries.Stats, PathLib.Join(directory.Path, entries.Name))); } } }
public async Task FeatureTest() { var fs = await TestFileSystem(); var walker = new FileSystemDirectoryWalker(fs, await fs.CreateFileHandle(Url.Parse("file://test/"))); await foreach (var item in walker) { Console.WriteLine(item.FileHandle); foreach (var dirent in item.Entries) { Console.WriteLine($"\t{dirent.Name}\t\t{dirent.Stats.Type}"); } } }
public async Task CallbackThrowsTest() { var callbackCount = 0; var fs = await TestFileSystem(); var walker = new FileSystemDirectoryWalker(fs, await fs.CreateFileHandle(Url.Parse("file://test/"))); using var walkerThread = walker.StartWalkerThread(_ => { callbackCount++; if (callbackCount % 2 == 0) { // throw exception should not affect the walker throw new InvalidOperationException(); } return(Task.CompletedTask); }); await walkerThread.WaitFullWalk(); }