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 a BackgroundWorker.
Use async/await.
Use Task.Run.