多线程 - 产生多个线程并等待

时间:2012-07-12 12:12:29

标签: c# multithreading

我需要一些关于多线程的建议。

示例:我想生成200个Threads,每个人应该从网站上抓取一个不同的图像(该网站有点慢)。但应该有最大值。一次40个线程。

有什么想法吗?

我期待着一些答案。

4 个答案:

答案 0 :(得分:2)

您可以轻松使用ThreadPool。该池可以很好地管理线程,但是如果你真的必须限制你可以使用的最大数量:

ThreadPool.SetMaxThreads(40, 40);

// submit 200 tasks to the pool
for(int i = 0; i < 200; i++)
{
   ThreadPool.QueueUserWorkItem(
       () =>
       {
           // code for each task
       });
}

不幸的是,没有内置的方法等待任务完成,所以你只需要即兴创作。如果您可以访问.NET 4.0,则可以查看Parallel.For

ParallelOptions po = new ParallelOptions();
po.MaxDegreeOfParallelism = 40;
Parallel.For(0, 200, po,
   i =>
   {
      // code for each task
   });

答案 1 :(得分:1)

使用线程安全的队列,填充所需的所有URL。

创建40个线程,其作用是从该队列中获取下一个项目并从URL下载。当队列为空时,线程应该完成。

答案 2 :(得分:0)

SlimSemaphore slm=new SlimSemaphore(40);

slm.Wait()

[your code]

slm.Release();

这将允许一次只执行40个线程。

注意:SlimSemaphore(如果使用.Net framework 4.0)       其他       旗语

 only efficiency difference is there

答案 3 :(得分:0)

您可以使用您创建的ParallelOptions对象设置MaxDegreeParallelism并提供给Parallel.ForEach循环。当我稍后再次使用适当的键盘时,我会粘贴一些代码。