创建多个后台工作线程的最佳方法是什么?

时间:2011-10-05 18:19:13

标签: c# threadpool

我想同时执行多项任务(远程共享上的磁盘IO)。我不想阻止UI。我想我需要创建一个执行以下操作的自定义类...

  • 接受并排队请求(使用堆栈)
  • 检查线程池以及线程是否可用以所请求的信息启动它
  • 当每个线程完成时,检查堆栈是否有待处理的请求......

有更好的方法吗?

有没有可用的课程?

我应该使用BackgroundWorker类的池还是别的什么?

我是否必须在自定义类中实现BackgroundWorker类,以便创建多个线程?

我想创建最多8个线程来删除文件和文件夹。我需要查询堆栈中的项目数以更新UI。

我目前有代码使用单个BackgroundWorker线程删除文件和文件夹(这使得UI不会被锁定,但是我需要花费很长时间才能同时运行多个实用程序)。

谢谢, 利

2 个答案:

答案 0 :(得分:1)

如果您使用的是.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网络堆栈的深处有时会发生奇怪的事情。

答案 1 :(得分:0)

您可以使用BackgroundWorker池,但请注意,它设计用于简单的多线程场景。 我建议使用TPL或Threadpool来解决你的问题,但是如果你的代码已经在使用一个BackgroundWorker,你会更快,重写它而不是使用TPL。

也许这个讨论会帮助您做出决定:BackgroundWorker vs. BackgroundThread