The idea is from https://unix.stackexchange.com/questions/344360/collect-exit-codes-of-parallel-background-processes-sub-shells#436932
$ ./main.sh 5
[Task 4] Job starting...
[Task 4] Sleeping...
[Task 1] Job starting...
[Task 1] Sleeping...
[Task 2] Job starting...
[Task 2] Sleeping...
[Task 5] Job starting...
[Task 5] Sleeping...
[Task 3] Job starting...
[Task 3] Sleeping...
[Task 5] Successfully completed
[Task 1] Successfully completed
[Task 2] Successfully completed
[Task 3] Something went wrong!
[Task 4] Successfully completed
$ echo $?
1
As the outputs from sub tasks are prefixed with task IDs, you can easily filter to check only particular task's output:
$ ./main.sh 5 | grep '^\[Task 3\] '
[Task 3] Job starting...
[Task 3] Sleeping...
[Task 3] Something went wrong!
Or group the output by tasks
$ ./main.sh 5 | sort -s -n -t' ' -k 2,2
[Task 1] Job starting...
[Task 1] Sleeping...
[Task 1] Successfully completed
[Task 2] Job starting...
...