Я застрял в ASP. NET 3, что означает, что я не могу использовать модель асинхронного программирования Task . В ASP. NET 4 вперед, я думаю, я могу просто безопасно сделать await Task.Delay(n).ConfigureAwait(false);
, но здесь это не вариант.
Я хочу намеренно создать односекундную задержку перед ответом на ASP. NET, но я хочу убедиться, что влияю только на текущий запрос, а не задерживаю других пользователей. Пулы потоков и тому подобное никогда не были моей сильной стороной.
Если я использую Thread.Sleep(1000)
, он блокирует текущий поток - означает ли это только этот конкретный запрос? Или другие запросы потенциально в том же потоке и блокируются, особенно если есть приличная нагрузка трафика c?
Действует ли Task.Delay(1000).Wait()
так же?
Я попадал в тупик в прошлом, делая такие вещи, чего я никогда не понимал, так может ли это вызвать тупиковые ситуации с другими запросами?
У меня есть два сценария ios:
Первый , только внутри действия контроллера:
public ActionResult DoSomething() {
DoSomethingElse();
Thread.Sleep(1000); // Or Task.Delay(1000).Wait() or whatever
return something;
}
Мне также нужно, чтобы это было в отдельной задаче, которую я начинаю с действия контроллера, например, запустил и забыл, который я вызываю примерно так:
Task.Run(() => RunProcess(processID))
.ContinueWith(task =>
{
if (task.IsFaulted) { /**/ } else { /**/ }
}
});
void RunProcess(Guid processID) {
DoAnotherThing();
Thread.Sleep(1000); // or Task.Delay(1000).Wait() or whatever else
}