Using thread pools to manage threads. TaskManager implementations are now generic in return results.