I would use separate thread to run long running operation on the server, and I would make Ajax requests to the server to get operation status each N seconds.
You also can think about WebSockets/SignalR. But not all the browsers supports this technology. There is some libs on NuGet for SignalR implementation. http://nuget.org/packages?q=signalr
I recommend you to check this video http://www.asp.net/signalr/videos/getting-started/signalr-and-web-sockets
If you need faster solution, you can update view like that:
<p>@Model.OperationState</p>
@if (Model.OperationIsInProgress){
<script>
setTimeout("location.reload(true);", 10000);
<script>
}
but it is not async approach. This js reloads page every 10 seconds.
To start new thread you can use simple System.Threading classes:
using System.Threading;
var thread = new Thread(() => {
//Call your long running operation here
});
thread.Start();