Returns a task that has already failed, so awaiting it will throw the provided exception while still preserving normal async error flow.