2
我试图正确使用任务调度程序,即IOTaskScheduler
。我有一个抓取网页和每个请求(这是一项任务)的应用程序,我正在生成一个新的IOTaskScheduler
。相反,我应该只有一个IOTaskScheduler
实例并将其传递给所有Web请求(任务)?应该有多少个任务调度程序实例?
或者在哪种情况下最好生成单独的任务调度程序?
我试图正确使用任务调度程序,即IOTaskScheduler
。我有一个抓取网页和每个请求(这是一项任务)的应用程序,我正在生成一个新的IOTaskScheduler
。相反,我应该只有一个IOTaskScheduler
实例并将其传递给所有Web请求(任务)?应该有多少个任务调度程序实例?
或者在哪种情况下最好生成单独的任务调度程序?
回答此问题:对于此TaskScheduler
,您需要共享一个实例,以便可以将多个任务复用到此调度程序提供的少数线程上。
你应该怎么做:你根本不应该使用这个任务调度器。它没有什么特别让IO更快。使用普通的固定并发调度程序,它使用普通的.NET线程。
或者在哪种情况下最好生成单独的任务调度程序?
我不知道任何。调度程序旨在将多个任务复用到少数线程。使用每个调度程序注册单个任务会限制调度程序可以智能地执行的操作。
对于一些调度程序来说并不重要。例如,一个将每个任务放到一个新线程上的调度程序。
谢谢你的出色答案,关于你使用固定并发调度程序的建议,IOCompletionPortTaskScheduler是否合格,要求你指定固定数量的可用线程? –
我以为你在使用它。你可以使用它,如果你想。我的想法是,它并没有为ParallelExtensions中的其他更简单的调度程序提供优势。那么LimitedConcurrencyLevelTaskScheduler呢? ParallelExtensions有bug(发现)。使用最简单的类。例如,IOCP调度程序使用不安全的代码。你可能不想在生产中使用它。 – usr
目前还没有,我目前正在使用IOTaskScheduler。不过谢谢你的意见和建议,我会把它放在船上。非常感谢。 –