added a periodic worker

The periodic worker will call a function periodically based on an input duration
maybe worth also checking that there are no further sends on funcHasRun? just select with a ShortWait timeout