Долгосрочный поток работает в WebApi Controller - PullRequest
0 голосов
/ 25 июня 2019

Я планирую выполнить некоторую долгосрочную задачу в методе одного контроллера, а другой метод контроллера - для мониторинга хода выполнения этой долгосрочной задачи.

Предположим, что долгосрочная задача показана ниже:

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 не использует многопоточность для обработки внешнего запроса? Я предполагаю, что эти 2 вызова WebApi не влияют друг на друга, поэтому они могут работать параллельно, однако, кажется, только один метод контроллера может выполняться одновременно? Я прав?

Как я могу выполнить задачу проверки прогресса?

Большое спасибо

...