我正在尝试不间断地运行多个任务。 这是我的代码:
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);
}
因此,此函数等待所有任务完成并运行下一批任务。但是我想在一个任务完成后立即开始任务,而不必等待其他任务。
谢谢!
答案 0 :(得分:8)
我会使用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(){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.