Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 我应该使用线程池还是任务并行库_.net_Multithreading_Task Parallel Library - Fatal编程技术网

.net 我应该使用线程池还是任务并行库

.net 我应该使用线程池还是任务并行库,.net,multithreading,task-parallel-library,.net,Multithreading,Task Parallel Library,使用.Net控制台应用程序处理用户请求,并将每个处理请求的结果发送回用户(使用TCP套接字) 出于测试目的,我创建了少量线程来在多个线程上执行此任务,但现在转到生产环境,我需要能够并行处理尽可能多的请求 我对使用线程池还是TPL感到困惑。(每个请求的平均处理时间为3秒)有什么建议吗 这是我目前的代码: public void Start() { started = true; Thread looper = new Thread(new ThreadSt

使用.Net控制台应用程序处理用户请求,并将每个处理请求的结果发送回用户(使用TCP套接字)

出于测试目的,我创建了少量线程来在多个线程上执行此任务,但现在转到生产环境,我需要能够并行处理尽可能多的请求

我对使用线程池还是TPL感到困惑。(每个请求的平均处理时间为3秒)有什么建议吗

这是我目前的代码:

 public void Start()
    {
        started = true;
        Thread looper = new Thread(new ThreadStart(BufferRunner));
        looper.Start();
        Thread looper2 = new Thread(new ThreadStart(BufferRunner));
        looper2.Start();
        Thread looper3 = new Thread(new ThreadStart(BufferRunner));
        looper3.Start();
        Thread looper4 = new Thread(new ThreadStart(BufferRunner));
        looper4.Start();
    }

    private void BufferRunner()
    {
        while (started)
        {
            BufferedCommand command = null;
            lock (buffer)
            {
                if (buffer.Count > 0)
                    command = buffer.Dequeue();//buffer.Enqueue happens when user request is received
            }
            if (command != null)
               ExecuteCommand(command);
        }
    }

您应该使用TPL,因为它将提供更高级别的抽象,并且比
ThreadPool

更喜欢TPL而不是
Thread
ThreadPool
。很难找到使用旧API的理由<代码>任务提供了可组合性、更好的错误处理和等待

每个请求的平均处理时间为3s


这听起来像是
LongRunning
选项可能是合适的。对此进行调查。

我实现了一个包含任务的版本,并将运行一些测试。然而,我仍然不确定我是否应该使用“长时间运行”选项,仍然在学习任务。谢谢