阻塞C#中的线程组

本文关键字:线程 阻塞 | 更新日期: 2023-09-27 18:28:18

我有100个线程。我想在10个其他线程运行之前运行10个线程,并继续留在线程数组中。有人能帮我吗?

对不起我的英语。提前感谢。

阻塞C#中的线程组

下面的代码将启动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的网站上还有更多关于并行编程的文章。你可以读,它写得很好。