implemented TaskExecutor.join()