C#:Make Task同时运行

时间:2013-05-26 15:48:04

标签: 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);
}

因此,此函数等待所有任务完成并运行下一批任务。但是我想在一个任务完成后立即开始任务,而不必等待其他任务。

谢谢!

2 个答案:

答案 0 :(得分:8)

我会使用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个任务。

答案 1 :(得分:0)

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

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

t1.RunSynchronously();

// then start your next batch tasks.