我有100个帖子。我想在10个另一个线程运行之前运行10个线程并继续保持threads数组。有人能帮助我吗?
抱歉我的英文。提前谢谢。
答案 0 :(得分:2)
Here是另一种调度程序,它可以让您手动控制并行度。
答案 1 :(得分:2)
似乎您可以使用TPL完成任务。运行任务,等待Task.WaitAll()完成任务,运行另一堆任务,使用ContinueWith完成后执行某些操作,仍然执行其他代码,例如UI线程...阅读相关内容here并查看一些源代码。在Albahari的网站上有更多关于parallel programming的文章。你可以阅读它,它非常好写。
答案 2 :(得分:2)
以下代码将启动10个任务,并在开始接下来的10个任务之前等待它们完成。需要注意的是,10个任务开始的顺序并不能保证。也就是说,此示例将阻止直到10的集合完成,但任务1可能在任务0之前开始:
private static void Main()
{
List<Task> tasks = new List<Task>();
for (int i = 0; i < 100; i++)
{
if (i % 10 == 0)
{
Console.WriteLine("Waiting for all tasks to complete");
Task.WaitAll(tasks.ToArray());
Console.WriteLine("All tasks have completed. Continuing...");
tasks.Clear();
}
tasks.Add(Task.Factory.StartNew(TrivialTask, new TaskState(i)));
}
}
public class TaskState
{
public TaskState(int id)
{
TaskId = id;
}
public int TaskId { get; set; }
}
private static void TrivialTask(object state)
{
TaskState taskState = (TaskState) state;
Thread.Sleep(1000);
Console.WriteLine("Task " + taskState.TaskId + " completed");
}