You use threads when you have constant work to do. Either directly ofr with a custom written pool. And even then you may hide it behind a custom Task Scheduler (using his own thread pool).
Threads have SOME Advantages when yo uneed control over the low Level thread Parameters - which is VERY rare. Something trivia like Setting priority is something you also can do in async (remember to set back), but sometimes you ened to set up quite some things for interop.
Still, These days threads are a very low Level API - since Tasks are around with custom schedulers, you really have VERY Little uses for threads outside a custom Task Scheduler (which may use a thread pool of custom made threads internally as low Level API).
Threads also come in Handy when yo uallocate a thread for LONG TERM. Long term is not necessarly "computational intensive". I have an API here that runs in 24 hour Loops on a custom thread - I start a thread, call into a "process data" method which calls back to me. The method Returns either on issue / error, or once per day (to be immediately restarted for the next real time data block). Obviously, being busy non stop, this is a good case for a thread, not a Task as ALL the advanced Features of a Task would be useless.
For pretty much everything else These days I use a Tasks / async.