创建几个后台工作线程的最好方法是什么?
本文关键字:方法 是什么 线程 工作 后台 几个 创建 | 更新日期: 2023-09-27 18:10:35
我想同时执行几个任务(远程共享上的磁盘IO)。我不想阻塞UI。我认为我需要创建一个自定义类来执行以下操作…
- 接受请求并将其排队(使用Stack)
- 检查线程池,如果线程可用,用请求的信息启动它
- 当每个线程完成时检查堆栈中是否有挂起的请求…
有更好的方法吗?
是否已经有这个类可用?
我应该使用BackgroundWorker类的池还是其他东西?
我是否必须在自定义类中实现BackgroundWorker类,以便我可以创建多个线程?
我想创建多达8个线程删除文件和文件夹。我需要查询堆栈上的项数以更新UI。
我目前有一个单一的后台工作线程的代码来删除文件和文件夹(这使UI从锁定,但它需要很长时间,我倾向于在同一时间运行几个实用程序)。
谢谢,李
如果您正在使用。net 4,那么任务并行库看起来正是您所需要的。MSDN的参考资料在这里:http://msdn.microsoft.com/en-us/library/dd460717.aspx。
具体来说,http://msdn.microsoft.com/en-us/library/dd537608.aspx的例子建议替换
foreach (var item in sourceCollection)
{
Process(item);
}
Parallel.ForEach(sourceCollection, item => Process(item));
小心代码中的死锁;特别是要进行广泛的测试,因为有时在Windows网络堆栈的深处可能会发生奇怪的事情。
你可以使用一个BackgroundWorker池,但注意它是为简单的多线程场景设计的。我建议使用TPL或Threadpool来解决你的问题,但如果你的代码已经使用了一个BackgroundWorker,你会更快,重写它为8而不是使用TPL。
也许这个讨论将有助于你的决定:BackgroundWorker与BackgroundThread