One extra question though - let's say I have multiple tasks that can be blocking, then based on what you mentioned earlier I can use a thread pool to kickstart each task. So far so good. The question is : when to call "complete" ? Should I call complete on every thread that had a blocking operation ?
Or I will have to make it one time after each thread finishes ?
Just to complete such a case scenario and understand the full complexity. Thanks!