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

loy*_*low 2 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())
            };
Run Code Online (Sandbox Code Playgroud)

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

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

Jon*_*eet 6

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

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

TaskScheduler如果你真的想要,你可以使用自己的自定义,但这将是相对极端的.

您应该阅读有关任务调度程序的MSDN文章(包括默认文章)以获取更多信息.