TaskCompletionSource now sets exception properly.