【问题标题】:How to create multiple threads from an application and do not listen to their response?如何从应用程序创建多个线程并且不听他们的响应?
【发布时间】:2013-07-31 23:07:01
【问题描述】:

我正在尝试执行以下操作:

我有一个服务器,它应该从队列中获取许多消息并处理它们。现在我想要为每条消息创建一个新线程,这些线程将处理对队列的响应,我只希望我的服务器(核心线程)只是监听消息并创建线程,而不关心它们会发生什么.

我怎样才能做到这一点?我知道我可以使用Thread 类来创建一个线程,但是应用程序只会继续监听线程,直到完成为止。 我也可以创建一个async 方法并运行它,但是当它完成时会发生什么?如果我希望它是async,那么该方法也应该是静态的,但在我当前的应用程序中这不是解决方案,因为我在此方法中使用了许多非静态变量。

任何想法都将不胜感激。

【问题讨论】:

    标签: c# multithreading asynchronous


    【解决方案1】:

    除非您有非常具体的原因,否则我建议您使用任务而不是线程。 无论如何,它们很可能会在后台运行,但它们产生的 CPU/内存开销更少,并且(在我看来)在出现异常时更容易处理,...

    Task t = Task.Run(() => ProcessMessage(message));
    

    不妨看看this introduction

    【讨论】:

      【解决方案2】:

      你是什么意思

      我知道我可以使用 Thread 类来创建一个线程,但是应用程序只会继续监听该线程,直到 if 完成。

      只需生成线程并让它运行:

          { 
              Thread t = new Thread(Foo);
              t.Start();
          }
      
          public void Foo()
          { }
      

      这不会让主线程监听子线程,它只是产生它们并继续按照说明工作。

      顺便说一句,how to create and run threads 上有大量结果。

      【讨论】:

        【解决方案3】:

        由于我不喜欢其他人这样做,这里是每种方式的简单示例(异步/基于任务),您可以选择自己喜欢的方式。

        异步实现

        int main()
        {
            while(true)
            {
                string data = SomeMethodThatReturnsTheNextDataFromQueue();
                ProcessDataAsync(data);
            }
        }
        
        async private void ProcessDataAsync(string msg)
        {
            // The *await* keyword returns to caller and allows main thread to continue looping.
            bool result = await ParseDataAndSaveSomewhere(msg);
            return;
        }
        

        基于任务的实施

        int main()
        {
            while(true) 
            {  
                string data = SomeMethodThatReturnsTheNextDataFromQueue();
                Task task = new Task(() => { ProcessData(data) });
                task.Start();
            }
        }
        
        private void ProcessData(string data)
        {
            // Do work
        }
        

        【讨论】:

          猜你喜欢
          • 2020-11-26
          • 2018-08-13
          • 1970-01-01
          • 2013-03-08
          • 1970-01-01
          • 2011-08-08
          • 1970-01-01
          • 2018-06-14
          • 2015-11-02
          相关资源
          最近更新 更多