统计Task.Run()创建的线程数
Count the number of threads created by Task.Run()
我正在对 BlockingCollection
的性能进行基准测试。
class Program
{
private static BlockingCollection<int> bc = new BlockingCollection<int>(100000);
private static BlockingCollection<int> bc2 = new BlockingCollection<int>(100000);
static void Main(string[] args)
{
for (int i = 0; i < 100000; i++)
{
bc.TryAdd(i);
}
var stopWatch = new Stopwatch();
stopWatch.Start();
while (bc.Count != 0)
{
bc.Take();
}
stopWatch.Stop();
Console.WriteLine("Simple " + stopWatch.Elapsed.TotalMilliseconds);
createThreadPool(bc2);
Console.Read();
}
static void ByTaskRun(BlockingCollection<int> blockingCollection)
{
for (int i = 0; i < 100000; i++)
{
blockingCollection.TryAdd(i);
}
var stopWatch = new Stopwatch();
stopWatch.Start();
Task k = Task.Run(() =>
{
while (blockingCollection.Count != 0)
{
blockingCollection.Take();
}
});
stopWatch.Stop();
Console.WriteLine("Task.run " + stopWatch.Elapsed.TotalMilliseconds);
}
}
在 main()
方法中,我只是从阻塞集合中取出元素,而在 ByTaskRun()
中,我 运行 一个任务是取出元素。我发现 Task.Run()
速度更快。它会在内部创建一个 Threadpool
吗?如果我想获得 Task.Run
创建的线程数,我该如何获得该数字?
在此示例中 Task.Run()
仅使用 一个 线程。
而且你得到的不是实际工作时间。
我正在对 BlockingCollection
的性能进行基准测试。
class Program
{
private static BlockingCollection<int> bc = new BlockingCollection<int>(100000);
private static BlockingCollection<int> bc2 = new BlockingCollection<int>(100000);
static void Main(string[] args)
{
for (int i = 0; i < 100000; i++)
{
bc.TryAdd(i);
}
var stopWatch = new Stopwatch();
stopWatch.Start();
while (bc.Count != 0)
{
bc.Take();
}
stopWatch.Stop();
Console.WriteLine("Simple " + stopWatch.Elapsed.TotalMilliseconds);
createThreadPool(bc2);
Console.Read();
}
static void ByTaskRun(BlockingCollection<int> blockingCollection)
{
for (int i = 0; i < 100000; i++)
{
blockingCollection.TryAdd(i);
}
var stopWatch = new Stopwatch();
stopWatch.Start();
Task k = Task.Run(() =>
{
while (blockingCollection.Count != 0)
{
blockingCollection.Take();
}
});
stopWatch.Stop();
Console.WriteLine("Task.run " + stopWatch.Elapsed.TotalMilliseconds);
}
}
在 main()
方法中,我只是从阻塞集合中取出元素,而在 ByTaskRun()
中,我 运行 一个任务是取出元素。我发现 Task.Run()
速度更快。它会在内部创建一个 Threadpool
吗?如果我想获得 Task.Run
创建的线程数,我该如何获得该数字?
在此示例中 Task.Run()
仅使用 一个 线程。
而且你得到的不是实际工作时间。