相关疑难解决方法(0)

.NET应用程序中的最大线程数?

您可以在C#应用程序中创建的最大线程数是多少?当你达到这个限制时会发生什么?某种抛出的例外情况?

.net c# multithreading

130
推荐指数
5
解决办法
13万
查看次数

Task.Factory.StartNew或Parallel.ForEach用于许多长时间运行的任务?

可能重复:
Parallel.ForEach vs Task.Factory.StartNew

我需要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.

.net c# task-parallel-library parallel-for c#-4.0

10
推荐指数
1
解决办法
2万
查看次数