关于ASP.NET MVC上的Threadpool setMaxThreads

时间:2018-11-08 04:26:24

标签: c# asp.net multithreading threadpool

我是新手,使用线程逻辑。

我声明了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();
    }

0 个答案:

没有答案