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); } } }