Use TaskCompletionSource instead of Task.Factory.StartNew where simple result is needed

Hey, this is a very minor fix, but it's wasteful to spin off tasks just to return values.
We can use TaskCompletionSource instead.