public static void Main(string[] args)
        {
            {
                #region Snippet_1
                IFileSystem fs = new PhysicalFileProvider(@"C:\Users").ToFileSystem();
                #endregion Snippet_1
            }
            {
                #region Snippet_2
                IFileProvider fp = new PhysicalFileProvider(@"C:\");
                IFileSystem   fs = fp.ToFileSystem(
                    canBrowse: true,
                    canObserve: true,
                    canOpen: true);
                #endregion Snippet_2

                foreach (var line in fs.VisitTree(depth: 2))
                {
                    Console.WriteLine(line);
                }
            }
            {
                #region Snippet_3
                IFileProvider         fp         = new PhysicalFileProvider(@"C:\Users");
                IFileSystemDisposable filesystem = fp.ToFileSystem().AddDisposable(fp);
                #endregion Snippet_3
            }
            {
                #region Snippet_4
                IFileSystemDisposable filesystem = new PhysicalFileProvider(@"C:\Users")
                                                   .ToFileSystem()
                                                   .AddDisposeAction(fs => fs.FileProviderDisposable?.Dispose());
                #endregion Snippet_4
            }
            {
                #region Snippet_5
                using (var fs = new PhysicalFileProvider(@"C:\Users")
                                .ToFileSystem()
                                .AddDisposeAction(f => f.FileProviderDisposable?.Dispose()))
                {
                    fs.Browse("");

                    // Post pone dispose at end of using()
                    IDisposable belateDisposeHandle = fs.BelateDispose();
                    // Start concurrent work
                    Task.Run(() =>
                    {
                        // Do work
                        Thread.Sleep(100);
                        fs.GetEntry("");

                        // Release the belate dispose handle
                        // FileSystem is actually disposed here
                        // provided that the using block has exited
                        // in the main thread.
                        belateDisposeHandle.Dispose();
                    });

                    // using() exists here and starts the dispose fs
                }
                #endregion Snippet_5
            }

            {
                #region Snippet_6
                IFileSystem fs = new PhysicalFileProvider(@"C:\Users").ToFileSystem();
                foreach (var line in fs.VisitTree(depth: 2))
                {
                    Console.WriteLine(line);
                }
                #endregion Snippet_6
            }

            {
                #region Snippet_7
                IFileSystem        fs       = new PhysicalFileProvider(@"C:\Users").ToFileSystem();
                IObserver <IEvent> observer = new Observer();
                using (IDisposable handle = fs.Observe("**", observer))
                {
                }
                #endregion Snippet_7
            }
        }