gpt4 book ai didi

c# - 使用 ThreadPool.QueueUserWorkItem 的线程排序

转载 作者:行者123 更新时间:2023-11-30 14:19:58 25 4
gpt4 key购买 nike

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

我有一个要对 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

最佳答案

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

关于c# - 使用 ThreadPool.QueueUserWorkItem 的线程排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1833673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com