asp.net - MVC 中的异步控制器进度请求挂起
问题描述
我正在尝试获取在 Mvc 处理的 Ajax 请求的百分比。我了解到这应该使用 AsyncController 来完成。但是当第一个请求起作用时,我没有得到百分比,因为它在TaskProgress尾部。
控制器:
public class AsyncTestController : AsyncController
{
public void TaskAsync(int id)
{
AsyncManager.OutstandingOperations.Increment();
Task.Factory.StartNew(taskId =>
{
for (int i = 0; i < 100; i++)
{
Thread.Sleep(200);
HttpContext.Application["task" + taskId] = i;
}
var result = "result";
AsyncManager.OutstandingOperations.Decrement();
AsyncManager.Parameters["result"] = result;
return result;
}, id);
}
public ActionResult TaskCompleted(string result)
{
return Content(result, "text/plain");
}
public ActionResult TaskProgress(int id)
{
string asd = HttpContext.Application["task" + id].ToString();
return Json(new
{
Progress = HttpContext.Application["task" + id]
}, JsonRequestBehavior.AllowGet);
}
}
查看(javascript):
function async_test_start() {
var taskId = 543;
$.ajax({
url: '@Url.Content("~/IK/AsyncTest/task/")',
data: { id: taskId },
type: "GET",
async: true,
success: function (dt) {
window.clearInterval(intervalId);
console.log(dt);
}
});
var intervalId = window.setInterval(function () {
$.ajax({
url: '@Url.Content("~/IK/AsyncTest/taskprogress/")',
data: { id: taskId },
type: "GET",
async: true,
success: function (dt) {
console.log(dt.Progress + '%');
}
});
}, 5000);
}
结果(当ajax请求开始时):
解决方案
推荐阅读
- python-3.x - PyGTK3:从键盘捕获字符串
- c# - Azure 函数 - 此平台不支持 System.Data.SqlClient
- ios - 如何以编程方式设置 UIRefreshControl 微调器大小?
- django - 使用 UserPassesTestMixin(基于类的视图)和重定向
- google-sheets - Google表格中不同工作簿的联合范围
- c++ - 范围运算符需要找到 std 命名空间而不是 boost
- android - 从头开始制作自定义 ROM 需要什么?
- ruby-on-rails - 使用从另一个站点抓取的内容填充 Rails 应用程序
- c# - Azure 移动应用同步服务推送无法插入或更新
- python - 发布数据应该是字节。它不能是 str 类型