我是新手,使用线程逻辑。
我声明了ThreadPool.SetMaxThreads(10,10)并创建了多个相同的线程数10。
第一个请求运行正常,每个不同的浏览器又请求了2个。以下请求挂起,直到完成第一个请求的线程工作为止。
ThreadPool.SetMaxThreads是否会影响整个IIS应用程序池?
public ActionResult Index()
{
ThreadPool.SetMaxThreads(10, 10);
for (int i = 0; i < 10; i++)
{
Task.Factory.StartNew(() =>
{
try
{
Thread.Sleep(30000);
}
finally
{
}
});
}
return View();
}
这是使用semaphoreslim的新代码。 我的实际目标是只运行一次指定的线程数。 例如,我将下载9个文件,并为每个线程分配1个下载任务,最多3个线程。
public ActionResult Index()
{
int maxConcurrency = 3;
using (SemaphoreSlim concurrencySemaphore = new SemaphoreSlim(maxConcurrency))
{
List<Task> tasks = new List<Task>();
for (int i = 0; i < 9; i++)
{
concurrencySemaphore.Wait();
var t = Task.Factory.StartNew(() =>
{
try
{
// Here to actual my job logic.
Thread.Sleep(10000);
}
finally
{
concurrencySemaphore.Release();
}
});
tasks.Add(t);
}
Task.WaitAll(tasks.ToArray());
}
return View();
}