As you've discovered, tapestry stores page properties as PerThreadValues that are null on the non request thread. You should pass any contextual information to your worker's constructor.
Please note that if you use any PerThread services on the thread (eg Hibernate Session) you'll need to call PerthreadManager.cleanupThread() once your worker finishes. If you instead use the ParallelExecutor service, this will be done for you.