Try the power of TaskCompletionSource