2

我正在尝试不间断地连续运行多个任务。这是我的代码:

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);
}

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

谢谢!

4

2 回答 2

8

我会用SemaphoreSlim

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

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

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

于 2013-05-26T15:54:15.133 回答
0

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

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

t1.RunSynchronously();

// then start your next batch tasks.
于 2013-05-26T16:03:13.067 回答