C# 任务从延迟开始

C# 任务从延迟开始,c#,task-parallel-library,C#,Task Parallel Library,我以以下方式创建和启动任务: Task task = new Task(() => controller.Play()); task.Start(); 由于某些原因,有时任务启动时会延迟7-10秒左右。 我并行使用6个任务,最大任务数为32767,可用任务数为32759 这是我在创建任务之前记录的内容,所以不能达到最大任务数。我在任务应该执行的controller.Play()方法的第一行代码中写入日志,所以没有锁或任何可能使任务等待的东西 长时间运行的任务,比如需要10秒的100M

我以以下方式创建和启动任务:

 Task task = new Task(() => controller.Play());
 task.Start();
由于某些原因,有时任务启动时会延迟7-10秒左右。 我并行使用6个任务,最大任务数为32767,可用任务数为32759
这是我在创建任务之前记录的内容,所以不能达到最大任务数。我在任务应该执行的controller.Play()方法的第一行代码中写入日志,所以没有锁或任何可能使任务等待的东西

长时间运行的任务,比如需要10秒的100MB反序列化,应该是,嗯,那么,作为:-)

根据当前的实现,长时间运行的任务总是在专用线程上运行,并且不会对线程池施加压力


在您的情况下,您可能只有两个任务—反序列化和播放器。TaskScheduler的工作假设任务是短期的,在这种情况下,它显然会将“播放器”任务安排在“反序列化”任务之后运行。

如何以及在何处测量延迟?可能
controller.Play
调用有启动成本。旁注:启动任务的推荐方法是使用
task.Run()
我已将其调整为使用Run()而不是start()。仍然存在相同的问题。我意识到程序从另一个线程上的10MB大小的JSON文件反序列化,这大约需要10秒,一旦完成,调用controller.Play()的任务就会启动。我试图删除那些从json反序列化的代码行,这样就没有延迟了。我还尝试将controller.Play()设为空函数,但在json反序列化完成后仍会调用它。我有几个长时间运行的任务,这些任务在短时间内完成一些工作,然后睡眠1秒,然后在读取10MB文件的同时再做一些工作。我应该把所有那些长时间运行的线程放在后台工作线程上吗?后台工作线程也使用线程池。把它们放在不同的线程上。我确实使用了长时间运行的任务选项,现在它可以正常工作了,谢谢