Use tasks and Ports for a more async approach