spin up concurrent workers for the concurrent work queue, as opposed to constantly calling Parallel.ForEach
mark spent transactions instead of removing them to test the performance impact, no pruning is done yet