Example #1
0
        public void Stop()
        {
            // 关闭消息队列的消费器
            // 先完成添加
            queue.CompleteAdding();
            DateTime time1 = DateTime.Now;

            while (queue.Count > 0)
            {
                Thread.Sleep(1);
                // 最多等待10秒避免关不掉
                if (DateTime.Now - time1 > TimeSpan.FromSeconds(10))
                {
                    break;
                }
            }
            while (queue.Count > 0)
            {
                // 等了十秒还没听,队列全部元素废弃
                queue.Take();
            }

            queue = null;
            Task.WaitAll(task);
            task.Dispose();
            task = null;

            // 关闭发布器
            if (mqttServer != null)
            {
                mqttServer.Stop();
                mqttServer = null;
            }

            IsRuning = false;
        }