【发布时间】:2015-01-19 03:51:11
【问题描述】:
即使我长期使用 TPL,但因为它对我来说听起来很新。我想了解带有线程池的 TPL,我在 .NET 框架 4.0 中创建了一个 POC,如下所示。
public class CustomData
{
public long CreationTime;
public int Name;
public int ThreadNum;
}
public class TPLSample
{
public int MaxThread = 0;
public void Start()
{
Task[] taskArray = new Task[10000];
for (int i = 0; i < taskArray.Length; i++)
{
taskArray[i] = Task.Factory.StartNew((Object obj) =>
{
var data = new CustomData() { Name = i, CreationTime = DateTime.Now.Ticks };
Thread.SpinWait(10000);
data.ThreadNum = Thread.CurrentThread.ManagedThreadId;
if (Thread.CurrentThread.ManagedThreadId > MaxThread)
{
MaxThread = Thread.CurrentThread.ManagedThreadId;
}
Console.WriteLine("Task #{0} created at {1} on thread #{2}.",
data.Name, data.CreationTime, data.ThreadNum);
},
i);
}
Task.WaitAll(taskArray);
Console.WriteLine("Max no of threads {0}", MaxThread);
}
}
我发现只创建了 14 个线程来完成这个任务!!
但为什么是 14?标准是什么?我可以增加或减少这个数字吗? 我怎样才能改变这个数字。它真的有可能还是完全从开发人员那里抽象出来的。
【问题讨论】:
标签: c# multithreading task-parallel-library threadpool