Use the asynchronous delegate when you have naturally-asynchronous work to do (e.g., I/O-bound).
Use the synchronous delegate when you have naturally-synchronous work to do (e.g., CPU-bound).
Neither one is "better;" it just depends on what kind of work you need to do.