Beispiel #1
0
 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);
 }
Beispiel #2
0
    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();
    }