When writing asynchronous code in Unity, Coroutine and UniTask have long been the practical choices.
A major reason is that many Unity APIs must be called from the main thread.
If you simply use .NET Task and move work to a background thread, you can run into problems the moment you touch objects such as GameObject, Transform, or SceneMana...