创建多个任务是否会创建相同数量的线程?

时间:2012-10-29 18:58:31

标签: c# task-parallel-library

当我创建这样的任务数组时:

            var taskArray = new Task<double>[]
            {
                Task.Factory.StartNew(() => new Random().NextDouble()),
                Task.Factory.StartNew(() => new Random().NextDouble()),
                Task.Factory.StartNew(() => new Random().NextDouble())
            };

这肯定会创建3个线程,还是由CLR来创建它认为合适的线程?

因此,如果我在Web请求中执行此操作,这意味着将至少创建4个线程来为请求提供正确的服务吗? (每个任务的Web请求+ 1)

2 个答案:

答案 0 :(得分:5)

  

这肯定会创建3个线程,还是由CLR来创建它认为合适的线程?

后者。特别是,当这些任务完成得如此之快时,如果它们都在同一个线程上执行(尽管与调用StartNew的线程不同的线程),我也不会感到惊讶 - 特别是如果这是在“干净”的过程中并且线程池还没有启动许多线程。 (IIRC,线程池每0.5秒只启动一个新线程,这将为您在单个线程上执行所有任务提供充足的时间。)

如果你真的想要,你可以使用自己的自定义TaskScheduler,但那会相对极端。

您应该阅读the MSDN article on task schedulers(包括默认值)以获取更多信息。

答案 1 :(得分:0)

没有简单的答案。它取决于服务器上的可用资源。它将设置队列,如果服务器可以同时运行3个线程(它运行它),否则它将排队。