2

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

            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 个线程来为请求提供正确的服务?(网络请求 + 每个任务 1)

4

2 回答 2

6

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

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

如果你真的想要,你可以使用你自己的自定义TaskScheduler,但这会比较极端。

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

于 2012-10-29T19:01:34.353 回答
0

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

于 2012-10-29T19:01:42.977 回答