我计划用一个控制器的方法执行一些长期任务,而使用另一个控制器的方法来监视该长期任务的进度。
假设长期任务如下:
public async void test()
{
Task t = Task.Run(() =>
{
Thread.Sleep(10000);
});
await Task.WhenAll(t);
}
监视方法将是:
public string monitor()
{
return "monitoring...";
}
前端的ajax调用:
<button type="button" id="btn-test">test</button>
<script type="text/javascript">
function doMonitor() {
var d=$.ajax({
url: "/api/invitation/monitor",
method: "post"
});
d.done(function(data) {
setTimeout(doMonitor,1000);
});
}
$("#btn-test").on("click",function() {
var defer=$.ajax({
url: "/api/invitation/test",
method: "post",
});
defer.done(function(data) {
console.log("Done");
});
doMonitor(); //start the monitor process
});
</script>
但是,当我进行测试时,似乎是长期运行的方法-“测试”占用了所有资源,监视方法需要等待“测试”完成,然后才能正常运行。
IIS是否不使用多线程来处理前端请求?我假设这两个WebApi调用不会互相影响,所以它们可以并行运行,但是,似乎一次只能运行一个控制器方法?我说的对吗?
如何执行检查进度任务?
非常感谢