Threads are for working in parallel, async is for waiting in parallel.
If your app is doing the work, use threads. If something else is doing the work like a database engine or the kernel retrieving a file from disk, use async since your app is just waiting.