Destroy the worker pool. The pool will immediately stop
accepting new tasks. All previously submitted tasks will
be executed. The method blocks until all tasks have
completed execution, or the timeout occurs, or the current
thread is interrupted, whichever happens first.