private void ReportNodeAsync(Action callback = null)
 {
     Task.Factory.StartNew(() => {
         WsServerNodeState nodeState = null;
         try {
             int minerClientWsSessionCount = 0;
             int minerStudioWsSessionCount = 0;
             minerClientWsSessionCount     = AppRoot.WsServer.MinerClientWsSessions.Count;
             minerStudioWsSessionCount     = AppRoot.WsServer.MinerStudioWsSessions.Count;
             var ram   = Windows.Ram.Instance;
             var cpu   = Windows.Cpu.Instance;
             nodeState = new WsServerNodeState {
                 Address                   = ServerRoot.HostConfig.ThisServerAddress,
                 Description               = string.Empty,
                 MinerClientSessionCount   = AppRoot.MinerClientSessionSet.Count,
                 MinerStudioSessionCount   = AppRoot.MinerStudioSessionSet.Count,
                 MinerClientWsSessionCount = minerClientWsSessionCount,
                 MinerStudioWsSessionCount = minerStudioWsSessionCount,
                 Cpu = cpu.ToData(),
                 TotalPhysicalMemory     = ram.TotalPhysicalMemory,
                 AvailablePhysicalMemory = ram.AvailablePhysicalMemory,
                 OSInfo         = Windows.OS.Instance.OsInfo,
                 CpuPerformance = cpu.GetTotalCpuUsage(),
                 // 以下三个属性的访问约耗时30毫秒所以放在Task中
                 ProcessMemoryMb        = VirtualRoot.ProcessMemoryMb,
                 ThreadCount            = VirtualRoot.ThreadCount,
                 HandleCount            = VirtualRoot.HandleCount,
                 AvailableFreeSpaceInfo = VirtualRoot.GetAvailableFreeSpaceInfo()
             };
         }
         catch (Exception e) {
             Logger.ErrorDebugLine(e);
         }
         _wsServerNodeRedis.SetAsync(nodeState).ContinueWith(t => {
             if (t.Exception != null)
             {
                 NTMinerConsole.UserFail("呼吸失败:" + t.Exception.Message);
             }
             else
             {
                 NTMinerConsole.UserOk("呼吸成功");
             }
             callback?.Invoke();
         });
     });
 }