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); }
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); }
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 }; }