Personally I think this is is ok but we had the discussion the other day about doing as little outside the task context as possible.  This could be replaced by a queue and put the blocking on it into the main loop.