I do not see why it must be a list, shouldn't it be enough to move the addition to the cache after the work_function?
or is dictionary assignment not atomic? if not a lock there might be enough