在WebApi Controller中运行的长期线程

时间:2019-06-25 00:17:04

标签: multithreading asp.net-web-api2

我计划用一个控制器的方法执行一些长期任务,而使用另一个控制器的方法来监视该长期任务的进度。

假设长期任务如下:

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调用不会互相影响,所以它们可以并行运行,但是,似乎一次只能运行一个控制器方法?我说的对吗?

如何执行检查进度任务?

非常感谢

0 个答案:

没有答案