Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 服务器未处理多个并行请求_C#_Jquery_Ajax_Asp.net Mvc - Fatal编程技术网

C# 服务器未处理多个并行请求

C# 服务器未处理多个并行请求,c#,jquery,ajax,asp.net-mvc,C#,Jquery,Ajax,Asp.net Mvc,我正在尝试获取控制器方法的进度。我使用了setInterval方法在控制器内调用progress方法,但是setInterval内的ajax调用仅在控制器方法执行后命中控制器,在此之前,ajax请求状态在浏览器网络选项卡上保持pending 我考虑过让第一个方法异步 Java脚本代码 function Import() { $('.loader').show(); var checked; if ($('#chkNewCycle').is(":checked")) {

我正在尝试获取控制器方法的进度。我使用了
setInterval
方法在控制器内调用progress方法,但是
setInterval
内的ajax调用仅在控制器方法执行后命中控制器,在此之前,ajax请求状态在浏览器网络选项卡上保持
pending

我考虑过让第一个方法异步

Java脚本代码

function Import() {
    $('.loader').show();

    var checked;
    if ($('#chkNewCycle').is(":checked")) {
        checked = 'on';
    }
    else {
        checked = 'off';
    }

    var NewCycle = { IsNewCycle: checked };

    $.ajax({
        url: '/DataImport/Import',
        type: 'POST',
        data: NewCycle,
        success: function (result) {
            $('.loader').hide();
            if (result == "success") {
                window.clearInterval(intervalId);
                alert("Imported file for processing.");
                ClearData();

            }
            else {
                alert(result);
            }
        }
    });   


    var intervalId = window.setInterval(function () {
        $.getJSON('/DataImport/GetProgress', function (json) {
            console.log(json.Progress);
            $('#progress').html(json.Progress + '%');
        });
    }, 2000);



}
控制器

public async Task<string> Import(string IsNewCycle)
{
/*Some Code*/

await Task.Run(() => { 
/*Some Code*/

int iProgress =Convert.ToInt32(dProgress * 100);
HttpContext.Application["Progress" ] = iProgress;

 });

return string;


}

public ActionResult GetProgress()
{
return Json(new
{
     Progress = HttpContext.Application["Progress"]
}, JsonRequestBehavior.AllowGet);
}
公共异步任务导入(字符串IsNewCycle)
{
/*一些代码*/
等待任务。运行(()=>{
/*一些代码*/
int iProgress=转换为NT32(数据进程*100);
HttpContext.Application[“Progress”]=iProgress;
});
返回字符串;
}
公共操作结果GetProgress()
{
返回Json(新的
{
Progress=HttpContext.Application[“Progress”]
},JsonRequestBehavior.AllowGet);
}

我需要同时命中这两个控制器方法

使用
[SessionState(sessionstatebhavior.ReadOnly)]
属性装饰您的控制器,然后您可以并行执行请求。

我认为这应该可以做到!您如何确定它没有同时命中这两个?在Chrome网络选项卡中,多个进度请求状态处于挂起状态。您是否在服务器端握住调试器?是的,它没有命中。一旦第一个ajax调用完成,它就会命中。如果您按住调试器,它就不会命中另一个调试器。尝试使用操作某些数据的日志。看看有没有变化?