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