我是线程基础知识的新手。
我有一个要对 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.
}
}
我想在保存操作顺序的同时执行此操作。
线程(操作)可以等待一个文件......但是
不同的操作需要不同的执行时间。
我尝试了 AutoResetEvent 和 WaitHandle.WaitAll(..) 但它导致了 while 循环
停止直到所有“a(i)”操作完成..我希望 a(i) 和 b(j) 同时执行。
(但按 a(i) 和 b(j) 排序)
目前使用 .net 2.0 。
这非常相似,是这个问题的一部分Question https://stackoverflow.com/questions/1824640/database-operation-via-threadpool-or-asyn-programming