О потоке setMaxThreads на ASP.NET MVC - PullRequest
0 голосов
/ 08 ноября 2018

Я новичок в использовании логики потоков.

Я объявил 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();
    }
...