我曾帮助一位客户处理了一个应用程序的问题,该应用程序在一段时间后停止工作(最终又重新开始工作了)。
问题出在当一个任务(Task)
失败时,在任务中使用Thread.Sleep
五秒钟。由于每两秒钟可能排队多达800个任务,如果其中许多作业失败并调用了Thread.Sleep
,你可以想象这个问题有多严重。没有这些作业被标记为TaskCreationOptions.LongRunning
。
我重写了任务,所以不需要Thread.Sleep
(或Task.Delay
)。
然而,我对TaskScheduler
(默认值)在这种情况下的行为很感兴趣。它是如何和何时增加线程数量的?
await Task.Delay()
,那就能解决你的问题。 - svick