使用ThreadPool.QueueUserWorkItem对线程进行排序

Ami*_*itd 3 c# concurrency multithreading

我是线程基础知识的新手.

我有一个操作队列要对XML文件执行(节点添加,节点删除等)

1]有'n'xml文件,并且对于每个文件,使用ThreadPool.QueueUserWorkItem分配来自线程池的线程来执行这些文件操作.

我想使用线程实现并发和操作顺序(重要).
例如:假设是否要对文件"A.xml"执行操作[a1,a2,a3,a4,a5],并且要对文件执行
操作[b1,b2,b3,b4,b5,b6,b7] "B.xml".....
我想分配线程,以便我可以以
相同的顺序同时执行这些操作(因为文件不同).

2]也可以为每个操作分配一个线程并实现可靠性并保持顺序.

在STA模型中我做了类似的事情..

while(queue.count>0){
  File f = queue.Dequeue(); //get File from queue       
  OperationList oprlst = getOperationsForFile(f); 
// will get list-> [a1,a2,a3,a4,a5]   
  for each Operation oprn in oprlst 
  {
    performOperation(f,oprn)
    //in MTA i want to wait till operation "a1" completes and then operation "a2" will
   //start.making threads wait till file is in use or operation a(i) is in use.
  }    
}
Run Code Online (Sandbox Code Playgroud)

我想与操作订单保存同时执行此操作.线程(操作)可以在一个文件上等待......但不同的操作需要不同的执行时间.

我尝试了AutoResetEvent和WaitHandle.WaitAll(..),但它使while循环停止,直到所有'a(i)'操作完成..我希望a(i)和b(j)同时执行.(但在(i)和b(j)中排序)

目前正在使用.net 2.0.

这非常相似,也是问题问题的一部分

Jon*_*eet 5

为每个文件创建一个新线程,或者只为每个文件使用一个 ThreadPool.QueueUserWorkItem调用 - 无论哪种方式,您希望按顺序按顺序执行文件的操作,因此对该部分使用多个线程没有意义.在您的情况下,唯一可用的并行性是跨越不同的文件,而不是操作.