gather isn't deprecated, but TaskGroup is the better default for concurrent work that should succeed or fail together.
The difference is what happens on failure. With gather, when one task raises, the others keep running unless you cancel them yourself — a common source of leaked tasks and confusing logs:
TaskGroup cancels siblings on the first failure and raises an ExceptionGroup covering everything that went wrong.
gather is still the right tool when you specifically want return_exceptions=True — "run all of these, tell me which ones failed, don't stop for any of them".