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;
Task[] tasks = new Task[maxThreads];
while(true)
{
for(int i = 0;i<maxThreads;i++)
{
tasks[i] = new Task.Factory.StartNew(someTask);
}
Task.WaitAll(tasks);
}
因此,此函数将等待所有任务完成,并运行下一批任务。但我希望在一项任务完成后立即开始一项任务,而不必等待其他任务
谢谢 我会使用信号量lim
使用Parallel.ForEach和var 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.
@Ramhound,我认为你错了。任务负责管理自己的线程。您不应该在不同的线程中启动每个任务。为什么一个任务会在其所有兄弟线程在此解决方案中结束之前启动?他可能有批短期运行的任务要按顺序运行。@Capripio否,因为信号量用于将并发任务的数量限制为100。所以我可以这样写:int maxThread=100;SemaphoreSlim sem=新的SemaphoreSlimmaxThread;任务[]任务=新任务[maxThreads];whiletrue{forint i=0;i sem.Release;}Task.WaitAlltasks;}@卡普里奥不,没有sem,等等。上面的代码所做的是:它创建100个任务,每当运行的任务少于100个时,它就会创建一个新任务。但当所有任务在一个任务结束后不久完成时,它也会工作@卡普里奥对不起,我不明白。。如果你说的是等待所有任务完成后再开始新任务,那么不是。一个任务完成后,它就会开始一个新任务。
Task t1 = new Task(()=>{
// put your children tasks here.
Task.Factory.StartNew(()=>{}, TaskCreationOptions.AttachedToParent);
});
t1.RunSynchronously();
// then start your next batch tasks.