A thought here: doesn't this mean we end up with one store per task function?  Seems like it could be potentially wasteful and not work at all with memory-based stores.

This could be a per-thread store instead, using `threading.local`.