Async Web API和Ajax

时间:2016-10-29 07:48:10

标签: asp.net-web-api async-await

我有一个从管理员网页开始的长期工作。 作业只能启动一次,因此我有一个单例,它还保存作业的不同状态消息。

管理员启动作业(Ajax调用工作)后,javascript中的计时器启动,应该每10秒触发一次作业状态检查(计时器工作,调用被触发)。 我的问题是,这些调用永远不会到达服务器,直到作业完成...作业完成后,所有状态调用(应该是异步的)都会被处理..

WEB API代码:

public class CleanUpServiceToolController : ApiController
{
    [HttpPost]
    public async Task StartJob(StartCondition startCondition)
    {

        if (CleanUpServiceTool.Instance.Status == "Neu")
        {
            CleanUpServiceTool.Instance.Status = "I'm Busy";
            await Task.Delay(60*1000);//CleanUpServiceTool.Instance.Start(startCondition);
            CleanUpServiceTool.Instance.Status = "Neu";
        }
    }

    public string GetStatus()
    {
        return CleanUpServiceTool.Instance.Status;;
    }
}

JAVASCRIPT javascripts在逻辑上被拆分..但所有调用都通过这段代码

return $.ajax({
    url:  url
    type: type,
    data: (type === "PUT" || type === "POST") ? JSON.stringify(input) : input,
    contentType: contentType,
    dataType: dataType,
    jsonpCallback: jsonpCallbackFunctionName,
    timeout: timeout,
    async: true,
    cache: false
}).done(function (response) {
    var output = dataType === "jsonp" ? response : JSON.parse(response, true);
    successCallback(output);
}).fail(function (response) {
    var output;
    try {
        output = JSON.parse(response.responseText, false);
    } catch (exception) {
        output = response.responseText;
    }
    errorCallback(response.status, response.statusText, output);
}).always(function () {
    if (alwaysCallback) {
        alwaysCallback();
    }
});

我的代码是这样的:

  1. 获取作业/实例的状态(Works)
  2. 如果状态为“Neu”,则启用“Start Job”按钮(工作)
  3. on click将ajax POST数据发送到服务器(正常,服务器启动作业)
  4. 启动计时器并询问工作状态(不工作:调用堆叠,只有在StartJob任务完成后才会被调用...
  5. 为了测试我使用Task.Delay的javascript逻辑,我不想每次在测试期间启动这项工作。

    我真的不知道为什么我的“异步”通话实际上是“同步”通话!

    我甚至试过制作GetStatus异步,这实际上并没有多大意义(打开一个线程只是为了读取我实例的属性)

    任何想法,建议,修复? 感谢

0 个答案:

没有答案