我需要ThreadPool
每晚运行大约 1,000 个任务(这个数字将来可能会增加)。每个任务都在执行长时间运行的操作(从 Web 服务读取数据)并且不是 CPU 密集型的。Async I/O
不是此特定用例的选项。
给定一个IList<string>
参数,我需要DoSomething(string x)
. 我试图在以下两个选项之间进行选择:
IList<Task> tasks = new List<Task>();
foreach (var p in parameters)
{
tasks.Add(Task.Factory.StartNew(() => DoSomething(p), TaskCreationOptions.LongRunning));
}
Task.WaitAll(tasks.ToArray());
或者
Parallel.ForEach(parameters, new ParallelOptions {MaxDegreeOfParallelism = Environment.ProcessorCount*32}, DoSomething);
哪个选项更好,为什么?
笔记 :
答案应包括 和 的用法之间的TaskCreationOptions.LongRunning
比较MaxDegreeOfParallelism = Environment.ProcessorCount * SomeConstant
。