我有一个从管理员网页开始的长期工作。 作业只能启动一次,因此我有一个单例,它还保存作业的不同状态消息。
管理员启动作业(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();
}
});
我的代码是这样的:
为了测试我使用Task.Delay的javascript逻辑,我不想每次在测试期间启动这项工作。
我真的不知道为什么我的“异步”通话实际上是“同步”通话!
我甚至试过制作GetStatus异步,这实际上并没有多大意义(打开一个线程只是为了读取我实例的属性)
任何想法,建议,修复? 感谢