使用大量的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小时调用一次;它基本上是一个工作方法。这一切似乎都在我的本地机器上工作,但我想知道我有很多任务同时运行的风险是什么?

使用大量的Task.Factory.StartNew

一旦部署,最大的风险是在任务运行时应用程序池的回收:

那么为什么对于典型的按请求ASP来说这不是一个问题呢?NET代码?在ASP。. NET关闭AppDomain,它将尝试刷新现有的请求,并在关闭AppDomain之前给它们时间来完成。ASP。. NET和IIS会考虑它们知道正在运行的代码,比如作为请求一部分运行的代码。问题是,ASP. NET不知道在使用定时器或类似机制生成的后台线程上完成的工作。它只知道与请求相关的工作

http://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in-asp-net.aspx/