并发线程数量有限C#

时间:2014-08-25 14:27:35

标签: c# .net multithreading threadpool

我有一个网址列表,我想使用WebClient类下载源代码。让我们说我有这个网址:

private static string[] urls = 
{
   "google.com",
   "yahoo.com",
   "msn.com",
   "bing.com",
   "omarion.com",
   "bowwow.com"
};

这是一个包含6个网址的列表。我想只使用2个线程(同时)下载源代码。

我已经看到了一个选项:

private void RunAllActions(IEnumerable<Action> actions, int maxConcurrency)
{
    using(SemaphoreSlim concurrencySemaphore = new SemaphoreSlim(maxConcurrency))
    {
        foreach(Action action in actions)
        {
            Task.Factory.StartNew(() =>
            {
                concurrencySemaphore.Wait();
                try
                {
                    action();
                }
                finally
                {
                    concurrencySemaphore.Release();
                }
            });
        }
    }
}

但我不知道如何正确使用它。

我的想法是我有一些X个链接,但我想要Y个线程同时工作。

我已尝试使用ThreadPool,但如果我指定了5个线程,那么这个数字并没有真正考虑在内。我的意思是,即使我指定一次运行5个线程,8个线程可能会启动,或者只有3个线程,这取决于...我想的情况。

0 个答案:

没有答案