【发布时间】:2020-07-11 06:17:05
【问题描述】:
我被困在 ASP.NET 3 中,这意味着我无法使用 Task asynchronous programming model。在 ASP.NET 4 之前,我认为我可以安全地执行await Task.Delay(n).ConfigureAwait(false);,但这不是这里的选项。
我想在 ASP.NET 中响应之前故意创建一秒延迟,但我想确保我只影响当前请求而不延迟其他用户。线程池之类的从来都不是我的强项。
如果我使用Thread.Sleep(1000),它会阻塞当前线程——这是否意味着只有这个特定的请求?或者其他请求是否可能在同一个线程上并被阻塞,尤其是在流量负载很大的情况下?
Task.Delay(1000).Wait() 的行为方式是否相同?
我过去在做这种事情时也遇到过死锁,我从来没有真正理解过,那么这些可能会导致其他请求的死锁吗?
我有两种情况:
首先,在控制器动作内部:
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
}
【问题讨论】:
标签: c# asp.net-mvc async-await