C#:使任务同时运行

C#:使任务同时运行,c#,multithreading,task,C#,Multithreading,Task,我试图不间断地连续运行几个任务。 这是我的密码: 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); } int-maxThread=100; 任务[]任务

我试图不间断地连续运行几个任务。 这是我的密码:

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);
}
int-maxThread=100;
任务[]任务=新任务[maxThreads];
while(true)
{

对于(inti=0;i我将使用
SemaphoreSlim

int maxThread = 100;
SemaphoreSlim sem = new SemaphoreSlim(maxThread);

while (true)
{
    sem.Wait();
    Task.Factory.StartNew(someTask)
                .ContinueWith(t => sem.Release());
}

使用
Parallel.ForEach
var po=new ParallelOptions(){maxdegreeofpparallelism=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.

@Ramhound,我想你弄错了。任务负责管理自己的线程。你不应该在不同的线程中启动每个任务。为什么任务会在它的所有同级结束之前启动?他可能会有批短时间运行的任务按顺序运行。@Capripio否,因为信号量用于限制并发线程的数量所以我可以这样写:
int-maxThread=100;SemaphoreSlim-sem=new-SemaphoreSlim(maxThread);Task[]tasks=new-Task[maxThreads];while(true){for(int-I=0;I-sem.Release();}Task.WaitAll(tasks);}
@Capripio不,没有
sem。等等
。上面的代码所做的是:它创建
100个任务,每当运行的任务低于100个时,它就会创建一个新任务。但是当所有任务在一个任务结束后不久完成时,它也会工作!@Capripio抱歉,我不明白。如果你说的是,它会等待所有任务完成,然后开始新的任务任务,不。一个任务完成后,它就会开始一个新任务。