use TaskMutex/Condition to synchronize