public static ThreadMsg <T> Create(T data, Action <T> onMsg)
        {
            InitPool();
            ThreadMsg <T> ret = m_Pool.GetObject();

            ret.Data  = data;
            ret.OnMsg = onMsg;
            return(ret);
        }
        public void CreateThreadMsg <T>(T data, Action <T> onMsg)
        {
            lock (m_Lock)
            {
                ThreadMsg <T> msg = ThreadMsg <T> .Create(data, onMsg);

                m_MsgList.AddLast(msg.ListNode);
            }
        }
 private static void InPool(ThreadMsg <T> obj)
 {
     if (obj == null)
     {
         return;
     }
     InitPool();
     obj.Data  = default(T);
     obj.OnMsg = null;
     m_Pool.Store(obj);
 }