C#:让任务同时运行

我试图不停地运行几个任务。 这是我的代码:

int maxThread = 100; Task[] tasks = new Task[maxThreads]; while(true) { for(int i = 0;i<maxThreads;i++) { tasks[i] = new Task.Factory.StartNew(someTask); } Task.WaitAll(tasks); } 

因此,此函数等待所有任务完成并运行下一批任务。 但是我希望一旦完成任务就开始执行任务,而不必等待其他任务。

谢谢!

我会用SemaphoreSlim

 int maxThread = 100; SemaphoreSlim sem = new SemaphoreSlim(maxThread); while (true) { sem.Wait(); Task.Factory.StartNew(someTask) .ContinueWith(t => sem.Release()); } 

使用Parallel.ForEachvar po = new ParallelOptions(){MaxDegreeOfParallelism = 100}; 可以是其他选择。 但Parallel.ForEach并不保证它会使用100个任务。

我想用这个。 将任务附加到其父级; 这很容易。 像这样。

 Task t1 = new Task(()=>{ // put your children tasks here. Task.Factory.StartNew(()=>{}, TaskCreationOptions.AttachedToParent); }); t1.RunSynchronously(); // then start your next batch tasks.