dlr*_*as2 3 c# queue parallel-processing deadlock
我正在编写一个程序,需要递归搜索文件夹结构,并希望与多个线程并行执行.
我已经编写了相当简单的同步方法 - 最初将根目录添加到队列,然后将目录出列,对其子目录进行排队等,直到队列为空.我会用ConcurrentQueue<T>我的队列,但已经意识到我的循环会过早停止.第一个线程将使根目录出列,并且每个其他线程立即看到队列为空并退出,使第一个线程成为唯一运行的线程.我希望每个线程循环直到队列为空,然后等待另一个线程排队更多的目录,然后继续.我需要在循环中使用某种检查点,以便在每个线程都到达循环结束之前不会退出任何线程,但是我不确定最好的方法是在没有死锁的情况下执行此操作,而实际上没有更多的目录处理.
使用任务并行库.
创建一个Task以处理第一个文件夹.在此创建一个Task处理每个子文件夹(递归)和每个相关文件的任务.然后等待此文件夹的所有任务.
TPL运行时将使用线程池来避免创建线程,这是一项昂贵的操作.对于小件工作.
注意:
1据我了解,在TPL等待任务时 - 使用TPL方法 - TPL将重用该线程用于其他任务,直到等待完成为止.