您可以在C#应用程序中创建的最大线程数是多少?当你达到这个限制时会发生什么?某种抛出的例外情况?
我需要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());
Run Code Online (Sandbox Code Playgroud)
要么
Parallel.ForEach(parameters, new ParallelOptions {MaxDegreeOfParallelism = Environment.ProcessorCount*32}, DoSomething);
Run Code Online (Sandbox Code Playgroud)
哪个选项更好,为什么?
注意 :
答案应包括使用TaskCreationOptions.LongRunning和的比较MaxDegreeOfParallelism = Environment.ProcessorCount * SomeConstant.