任务工厂在开始时强制执行更多任务

时间:2013-12-09 10:30:43

标签: c# multithreading threadpool massive taskfactory

我正在填写任务工厂,其任务类似于此(伪代码):

private int _taskcounter;

剪断

var factory = new TaskFactory();
for(var i = 0;i<1000;i++)
   factory.StartNew(() => doWork());

剪断

private void doWork(){
   Interlocked.Increment(ref _taskcounter);
   //do some slow I/O work here
   Interlocked.Decrement(ref _taskcounter);
}

如果你现在看_taskcounter,你可以看到它最初开始大约10个任务 但随后它会开始1到2个任务/秒,直到队列结束。

小的明显行为,不是吗?

我的问题是:
有没有办法强制任务工厂在开始时启动更多任务?

我已经使用一些msdn示例类的变体来限制运行任务的最大值,以防止过多的内存消耗。
或者这个有趣的测量方法或我的考虑是否有问题?

没有必要在不同的线程中运行所有工作,否则我不会使用工厂 我只想从工厂的非工作偷窃行为中受益。

依赖工厂的智慧来处理其他一切。

1 个答案:

答案 0 :(得分:1)

据我所知,TaskFactory使用ThreadPool,因此您可以尝试使用SetMaxThreads方法。但实际上它旨在优化资源消耗。所以我认为你的效率不会提高。

此外,您可以尝试使用new Thread()手动启动线程,这可以帮助您快速启动多个线程,但是我不认为您会获得更高的效率。