我正在用类似这样的任务(伪代码)填充任务工厂:
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 示例类的变体来限制正在运行的任务的最大值,以防止过多的内存消耗。
还是这种有趣的测量方法或我的考虑有问题?
它没有必要在不同的线程中运行所有工作,否则我不会使用工厂
我只想从工厂的非工作窃取行为中受益。
对于其他一切,我都依赖工厂的智能。