计算Task.Run()

时间:2017-03-24 21:45:22

标签: c# multithreading task threadpool

我正在对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创建的线程数,我该如何获得该数字?

1 个答案:

答案 0 :(得分:0)

在此示例Task.Run()中,仅使用一个主题。 而且你得不到实际的工作时间。