This is a repost of your question,
Display visual result of async process in MVC action[
^]. The content from your comment helps in understanding the question.
The problem is that your tasks are asynchronous, meaning there is no information as to how much time it will take. Thus, it is a good practice to use a background service to keep a track of that task and you show the progress in the layout. This way, you will decouple the current page and the task.
You can utilize background threads to perform these actions. Thread pool threads are limited, and you will run out of threads quickly. Creating new threads is expensive and costly, and might not be a good solution at all. In this way, if I had to do this, I would consider using some sort of event-processing, like a message queue to manage and maintain the state of certain events and operations. Each operation can have its state, progress, and I can use that to update the users.
Check these links for a practical overview,
How to run Background Tasks in ASP.NET - Scott Hanselman[
^]
c# - How to run long-lasting process asynchronously under asp.net? - Stack Overflow[
^]
Simple Asynchronous Background Task Processing with Progress Dialog (Silverlight Solution)[
^]