当我创建这样的任务数组时:
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)
答案 0 :(得分:5)
这肯定会创建3个线程,还是由CLR来创建它认为合适的线程?
后者。特别是,当这些任务完成得如此之快时,如果它们都在同一个线程上执行(尽管与调用StartNew
的线程不同的线程),我也不会感到惊讶 - 特别是如果这是在“干净”的过程中并且线程池还没有启动许多线程。 (IIRC,线程池每0.5秒只启动一个新线程,这将为您在单个线程上执行所有任务提供充足的时间。)
如果你真的想要,你可以使用自己的自定义TaskScheduler
,但那会相对极端。
您应该阅读the MSDN article on task schedulers(包括默认值)以获取更多信息。
答案 1 :(得分:0)
没有简单的答案。它取决于服务器上的可用资源。它将设置队列,如果服务器可以同时运行3个线程(它运行它),否则它将排队。