阻塞C#中的线程组
本文关键字:线程 阻塞 | 更新日期: 2023-09-27 18:28:18
我有100个线程。我想在10个其他线程运行之前运行10个线程,并继续留在线程数组中。有人能帮我吗?
对不起我的英语。提前感谢。
下面的代码将启动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");
}
查看任务并行库。
这里有一个可供选择的调度器,它似乎可以让您手动控制并行度。
看来您可以用TPL完成任务。运行任务,使用Task.WaitAll()等待任务完成,运行另一组任务,在任务完成后使用ContinueWith做一些事情,仍然在执行其他代码,例如UI线程。。。在这里阅读并查看一些源代码。Albahari的网站上还有更多关于并行编程的文章。你可以读,它写得很好。