Data Access - Perform I/O operations

You have built a complex calculation algorithm. It takes quite some time to complete and you want to make sure that your application remains responsive. What do you do?

Run the code synchronously.
Use async/await.
Use a BackgroundWorker.
Use Task.Run.