Your requirement does not match your code example. You have tagged your async method, which means you want this method to be able to return before it completes its work. However, you say that you want him to return only after all the work is done.
Thus, if you want your method to be synchronous, do not use async and manually wait for all tasks to complete:
private void SomeWork() { var a = doWork1(); var b = doWork2(); var c = doWork3(); var d = doWork4(); ... a.Wait(); b.Wait(); c.Wait(); d.Wait(); }
or, more elegantly:
Task.WaitAll(a, b, c, d);
source share