5 C# ThreadedClient 在主程序退出后 client对象无法回收,后台线程一直在跑

在主线程退出后,一直有个后台线程在跑,导致进程无法结束

查看线程发现是ThreadeClient 在run,

而ThreadClient对象都被释放了,他拥有的线程居然一直在跑,变成野线程了

public override bool start() 

        {

            //conn.connect(SERVER, PORT, "admin", "123456");

            client  = new ThreadedClient(SUB_PORT);

            

            try

            {

                client.subscribe(SERVER, PORT, tableName, new SampleMessageHandler(), 1);

            }

            catch (Exception ex)

            {

                mquant.log(ex.Message, MsgLevel.error);

            }

            

            return base.start(); 

        }

        public override bool stop() { 

            stopFlag = true;

            try

            {

                //ThreadedClient client = new ThreadedClient(SUB_PORT);

                client.unsubscribe(SERVER, PORT, tableName);

            }

            catch (Exception e)

            {

               mquant.log(e.Message,MsgLevel.error);

            }

            finally

            {

                //conn.close();

            }

            return base.stop();

        }



attachments-2022-04-r9eHFcsv6267a7baa116c.png

请先 登录 后评论

1 个回答

Boye

这是因为在取消订阅时,没有让ThreadClient.HandlerLooper.run线程退出。DolphinDB c# api 会在1.30.17.1版本加一个close方法,关闭所有创建的线程以及网络连接,预计5月中旬发布。

请先 登录 后评论
  • 1 关注
  • 0 收藏,129 浏览
  • worm 提出于 2022-04-26 16:03

相似问题