tôi chỉ sử dụng các tính năng mới Async điều khiển trong MVC 4 như mô tả ở đây http://www.asp.net/mvc/tutorials/mvc-4/using-asynchronous-methods-in-aspnet-mvc-4ASP.NET MVC 4 async khiển Callback
Nếu tôi có một hành động mà có thể mất 10-20 giây để chạy tôi muốn cung cấp một số loại thanh trạng thái để thông báo cho người dùng về tiến trình. Các tính năng của Async có gì để giúp điều này không?
EDIT: Tôi sẽ mất một đâm vào làm thế nào tôi sẽ cố gắng và làm điều đó và xem liệu có cách nào tốt hơn
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>
Vâng, tôi đã làm điều gì đó như thế nhưng nếu nó là cùng một thông điệp cho 10 giây mọi người nghĩ hệ thống treo. – Craig
Vâng, tôi biết nó có thể không phù hợp, nhưng đôi khi "ảo giác" của tiến bộ chỉ là những gì người dùng cần. Ví dụ: nếu bạn biết công việc của mình mất trung bình 15 giây, hãy tự động hóa thanh tiến trình thông qua thời lượng đó bằng cách sử dụng js. Tôi biết nó có vẻ như lừa của nó cho người sử dụng, nhưng có thực sự là một số trường hợp thực sự lưu trữ tiến từng phần nơi nào đó, giống như một cơ sở dữ liệu và có bạn bỏ phiếu client-side cho sự tiến bộ chính xác chỉ là quá mức cần thiết. –
Tôi đã không nghĩ đến SignalR, nó có lẽ sẽ làm việc tốt. – Craig