Remove Threading Channels as communication method between threads.
Remove the _fileContexts ConcurrentDictionary
Change the core pipeline from working on Threading Channels to instead use a simpler Parallel.Foreach, which creates a Task to HashFiles, ScanTargets, and LogScanResults for each enumerated TContext context.
HashFiles, ScanTargets, and LogScanResults are no longer Async as working with the Channels was the only Async operation they were doing before and those are now gone. Further investigation and changes could dive deeper to see if more of the underlying IO operations could be changed to Async.
EnumerateFilesOnDisk no longer presorts the file list. Changed to return an IEnumerable and is no longer Async since it no longer makes Async calls. Would be another candidate to switch to using Async IO for file enumeration.