Bry*_*yan 20 c# multithreading threadpool
我正在开发一个控制台应用程序
我想使用Threadpool来执行Web下载.这是一些假代码.
for (int loop=0; loop< 100; loop++)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(GetPage), pageList[loop]);
}
snip
private static void GetPage(object o)
{
//get the page
}
Run Code Online (Sandbox Code Playgroud)
如何防止我的代码启动两个以上(或十个或其他)同步线程?
我试过了
ThreadPool.SetMaxThreads(1, 0);
ThreadPool.SetMinThreads(1, 0);
Run Code Online (Sandbox Code Playgroud)
但他们似乎没有任何影响.
Bri*_*eon 36
我会相应地使用Parallel.For
和设置MaxDegreeOfParallelism
.
Parallel.For(0, 1000, new ParallelOptions { MaxDegreeOfParallelism = 10 },
i =>
{
GetPage(pageList[i]);
});
Run Code Online (Sandbox Code Playgroud)
小智 16
只需反转以下代码:
ThreadPool.SetMaxThreads(1, 0);
ThreadPool.SetMinThreads(1, 0);
Run Code Online (Sandbox Code Playgroud)
至:
ThreadPool.SetMinThreads(1, 0);
ThreadPool.SetMaxThreads(1, 0);
Run Code Online (Sandbox Code Playgroud)
您不能将MaxThread设置为小于MinThread
就个人而言,我会使用SmartThreadPool并单独使用ThreadPool.但是,这可能是您想要的:C#线程池限制线程
包含链接的代码(请给原作者信用,不是我)
System.Threading.Semaphore S = new System.Threading.Semaphore(3, 3);
try
{
// wait your turn (decrement)
S.WaitOne();
// do your thing
}
finally
{
// release so others can go (increment)
S.Release();
}
Run Code Online (Sandbox Code Playgroud)
您可以使用该ThreadPool.SetMaxThreads
方法执行此操作.
但是使用ThreadPool for WebRequest存在一些问题.例如,阅读(ThreadPool或HttpWebRequest中的错误?)
ThreadPool.SetMaxThreads(2,2);
Run Code Online (Sandbox Code Playgroud)
我个人会使用AsParallel Linq
,为此.