private T GetFreeResource(out long messageId)
        {
            lock (key1)
            {
                foreach (long key in messages.Keys)
                {
                    if (!messages[key].InUse)
                    {
                        messages[key].InUse = true;
                        messageId           = key;
                        return(messages[key].Resource);
                    }
                }

                //申请新资源
                T message = IResourceObject.Request();

                //申请资源失败
                if (message == null)
                {
                    messageId = GetNullResourceId();
                    return(null);
                }
                else
                {
                    ResourceWatcher <T> tag = new ResourceWatcher <T>(message, true);
                    long id = NewResourceId();
                    messages.Add(id, tag);
                    messageId = id;
                    return(message);
                }
            }
        }