使用大量的Task.Factory.StartNew
本文关键字:Task Factory StartNew | 更新日期: 2023-09-27 18:17:48
我正在写一个asp.net应用程序,我意识到,对于一个特定的功能,我使用了很多Task.Factory.StartNew();
和这些任务反过来触发其他任务,像这样:
public void StartTheWork()
{
Task.Factory.StartNew(() => DoSomething1());
Task.Factory.StartNew(() => DoSomething2());
Task.Factory.StartNew(() => DoSomething3());
}
此方法每2小时调用一次;它基本上是一个工作方法。这一切似乎都在我的本地机器上工作,但我想知道我有很多任务同时运行的风险是什么?
一旦部署,最大的风险是在任务运行时应用程序池的回收:
http://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in-asp-net.aspx/那么为什么对于典型的按请求ASP来说这不是一个问题呢?NET代码?在ASP。. NET关闭AppDomain,它将尝试刷新现有的请求,并在关闭AppDomain之前给它们时间来完成。ASP。. NET和IIS会考虑它们知道正在运行的代码,比如作为请求一部分运行的代码。问题是,ASP. NET不知道在使用定时器或类似机制生成的后台线程上完成的工作。它只知道与请求相关的工作。