我有一个网址列表,我想使用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个线程,这取决于...我想的情况。