sólo estoy usando las nuevas funciones del controlador asíncrono en MVC 4 como se describe aquí http://www.asp.net/mvc/tutorials/mvc-4/using-asynchronous-methods-in-aspnet-mvc-4MVC controlador asíncrono ASP.NET 4 Devolución de llamada
Si tengo una acción que puede tomar 10-20 segundos para ejecutar Me gustaría ofrecer algún tipo de barra de estado para notificar al usuario del progreso. ¿Las características de Async tienen algo para ayudarlo?
EDIT: Voy a tomar una puñalada en cómo voy a tratar de hacerlo y ver si hay maneras mejores
public async Task<ActionResult> GizmosAsync()
{
return View("Gizmos", await GetGizmosAsync());
}
private void GetGizmosAsync()
{
for(int i=0; i<10; i++)
{
lock(_locker)
{
_statusMessage = String.Format("{0} of 10", i);
}
DoSomethingLongRunning();
}
}
public ActionResult Status()
{
return Json(new { Status = _statusMessage });
}
static readonly object _locker = new object();
static string _statusMessage = "";
....
<script>
setTimeout(displayStatus, 1000);
function displayStatus() {
$.post("/controller/status", function(data) {
alert(data.Status);
});
}
</script>
Sí, ya hacer algo así, pero si es el mismo mensaje durante 10 segundos la gente piensa que el sistema ha colgado. – Craig
Bueno, sé que puede no sonar apropiado, pero a veces la "ilusión" de progreso es justo lo que necesitan los usuarios. Por ejemplo, si sabe que su tarea lleva un promedio de 15 segundos, automatice una barra de progreso a través de esa duración usando js. Sé que puede parecer una tontería para el usuario, pero en realidad hay algunos casos en los que almacenar un progreso parcial en alguna parte, como una base de datos, y tener una encuesta del lado del cliente para el progreso exacto es exagerado. –
No había pensado en SignalR, probablemente funcionaría bien. – Craig