C# 一分钟后重新调用异步控制器操作

C# 一分钟后重新调用异步控制器操作,c#,.net,asp.net-mvc,asynchronous,C#,.net,Asp.net Mvc,Asynchronous,我在处理csv文件的MVC3异步控制器上有一个操作,其异步部分如下所示: [HandleError] [NoAsyncTimeout] public void UploadAsync(int jobId) { var timestamp = DateTime.Now; Log.Debug("UploadAsync " + timestamp); var job = _fileUploadService.GetJob(jobId);

我在处理csv文件的MVC3异步控制器上有一个操作,其异步部分如下所示:

  [HandleError]
  [NoAsyncTimeout]
  public void UploadAsync(int jobId)
  {
      var timestamp = DateTime.Now;
      Log.Debug("UploadAsync " + timestamp);

      var job = _fileUploadService.GetJob(jobId);

      Log.Debug("AsyncManager.OutstandingOperations.Increment " + timestamp);
      AsyncManager.OutstandingOperations.Increment();

      var task = Task<Job>.Factory.StartNew(() => {
            Thread.Sleep(90000);
      });

      task.ContinueWith(t =>
      {
         try 
         {
              AsyncManager.Parameters["Results"] = GetJobResultDetails(jobId);
          }
          //no "catch" block.  "Task" takes care of this for us.
          finally
          {
              AsyncManager.OutstandingOperations.Decrement();
          }
      });
  }

当ProcessJob(作业)任务花费不到一分钟的时间时,这种方法可以正常工作。一分钟后,同一任务在另一个线程上再次启动,处理与当前运行的任务相同的任务

对于可能导致这种行为的异步控制器方法或任务,是否有任何明显的超时设置缺失

编辑-

我用thread.Sleep替换了对process job的调用。在一分钟半的时间里,当我查看日志时,我可以看到UploadAsync仍然被调用了两次,因此它与ProcessJob执行的代码无关

值得注意的是,这仅在部署到集成服务器而不是本地时发生

是否有IIS设置需要升级以适应更长的处理时间

编辑-

使用Ajax调用UploadAsync:

 $(document).ready(function () {
    $("#JobIdToProcess").text(@Model.JobIdToProcess);
    var jobId = $("#JobIdToProcess").text();

    if (jobId.charAt(0)) {
      process(jobId);
    }
});

function process(jobId) {
    alert("process called");
    $.ajax({
        type: "GET",
        url: makeUrl('~@string.Format("/{0}/{1}", "FileUpload", "Upload")' 
                                                          + "/" + jobId),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        beforeSend: function(xhr) {
            $(window).bind('beforeunload', function() {
                xhr.abort();
            });
        },
        traditional: true,
        success: function (data) {
            var uploadResults = $.parseJSON(data);
            var completedDate = formatDate(uploadResults[0].CompletedDate);

            $("#CompletedDate" + jobId).html(completedDate);
        }
    });
}

“一分钟后,同一任务在另一个线程上再次启动,处理与当前运行的任务相同的任务”。。。我想你必须分享更多关于这一部分的信息。这种行为可能有几个原因,但似乎还有其他一些代码超时(MVC默认超时为45秒),并且按照它的规则,使用相信的下一项(即当前未完成的项)调用upload函数如何从视图中调用
UploadAsync
操作?你在使用AJAX吗?如果是,请显示相应的代码。
 $(document).ready(function () {
    $("#JobIdToProcess").text(@Model.JobIdToProcess);
    var jobId = $("#JobIdToProcess").text();

    if (jobId.charAt(0)) {
      process(jobId);
    }
});

function process(jobId) {
    alert("process called");
    $.ajax({
        type: "GET",
        url: makeUrl('~@string.Format("/{0}/{1}", "FileUpload", "Upload")' 
                                                          + "/" + jobId),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        beforeSend: function(xhr) {
            $(window).bind('beforeunload', function() {
                xhr.abort();
            });
        },
        traditional: true,
        success: function (data) {
            var uploadResults = $.parseJSON(data);
            var completedDate = formatDate(uploadResults[0].CompletedDate);

            $("#CompletedDate" + jobId).html(completedDate);
        }
    });
}