Я новичок в использовании логики потоков.
Я объявил 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();
}
Вот новый код с использованием семафора.
Моя фактическая цель - только указанное количество потоков, запущенных за один раз.
например, я скачаю 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();
}