The code further down that uses `_lastResult` will break if it only holds the last provider's result -- I think you'll need some list storing results from _all_ providers for the entire most recent run() invocation.  (Really they only need a boolean, but if you switch to interleaving instead of grouping the results as suggested above, you'll need to sew them together into a single list anyway).