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)
这肯定会创建3个线程,还是由CLR来创建它认为合适的线程?
后者.特别是,当这些任务完成得如此之快时,如果它们都在同一个线程上执行(虽然与调用的线程不同),我也不会感到惊讶StartNew- 特别是如果这是在一个"干净"的进程中并且线程池没有还不得不启动许多线程.(IIRC,线程池每0.5秒只启动一个新线程,这将为您在单个线程上执行所有任务提供充足的时间.)
TaskScheduler如果你真的想要,你可以使用自己的自定义,但这将是相对极端的.
您应该阅读有关任务调度程序的MSDN文章(包括默认文章)以获取更多信息.