Exemple #1
0
        protected override async Task <ExitCode> Run()
        {
            using var queue = new WorkQueue(ThreadCount);

            var files     = Input.EnumerateFiles().Select(f => (f, f.Size)).Take(1000).ToArray();
            var totalSize = files.Sum(f => f.Size);

            Console.WriteLine($"Found {files.Length} files and {totalSize.ToFileSizeString()} to hash");

            var stopwatch = new Stopwatch();

            stopwatch.Start();

            var su = new StatusUpdateTracker(1);

            await files.PMap(queue, su, async f =>
            {
                await f.f.FileHashAsync();
            });

            stopwatch.Stop();
            Console.WriteLine($"Hashed {totalSize.ToFileSizeString()} in {stopwatch.Elapsed.TotalSeconds} or {((long)(totalSize/stopwatch.Elapsed.TotalSeconds)).ToFileSizeString()}/sec");

            return(ExitCode.Ok);
        }
Exemple #2
0
 public ABatchProcessor(int steps)
 {
     UpdateTracker = new StatusUpdateTracker(steps);
     VFS           = new Context(Queue)
     {
         UpdateTracker = UpdateTracker
     };
     Queue.Status.Subscribe(_queueStatus)
     .DisposeWith(_subs);
     Queue.LogMessages.Subscribe(_logMessages)
     .DisposeWith(_subs);
     UpdateTracker.Progress.Subscribe(_percentCompleted);
     UpdateTracker.StepName.Subscribe(_textStatus);
 }
 public ABatchProcessor(int steps)
 {
     UpdateTracker = new StatusUpdateTracker(steps);
     VFS           = new Context(Queue)
     {
         UpdateTracker = UpdateTracker
     };
     Queue.Status.Subscribe(_queueStatus)
     .DisposeWith(_subs);
     Queue.LogMessages.Subscribe(_logMessages)
     .DisposeWith(_subs);
     UpdateTracker.Progress.Subscribe(_percentCompleted);
     UpdateTracker.StepName.Subscribe(_textStatus);
     DesiredThreads = new Subject <int>();
     Queue.SetActiveThreadsObservable(DesiredThreads);
 }
Exemple #4
0
 protected void ConfigureProcessor(int steps, IObservable <int> numThreads = null)
 {
     if (1 == Interlocked.CompareExchange(ref _configured, 1, 1))
     {
         throw new InvalidDataException("Can't configure a processor twice");
     }
     Queue.SetActiveThreadsObservable(numThreads);
     UpdateTracker = new StatusUpdateTracker(steps);
     Queue.Status.Subscribe(_queueStatus)
     .DisposeWith(_subs);
     Queue.LogMessages.Subscribe(_logMessages)
     .DisposeWith(_subs);
     UpdateTracker.Progress.Subscribe(_percentCompleted);
     UpdateTracker.StepName.Subscribe(_textStatus);
     VFS = new Context(Queue)
     {
         UpdateTracker = UpdateTracker
     };
 }