public override bool TryGet(object[] parameter, out IReactiveStream <IMessage, bool> result) { if (parameter.Length == 0) { throw new IndexOutOfRangeException(); } if (!(parameter[0] is UInt32)) { throw new ArgumentOutOfRangeException("parameter"); } UInt32 id = (UInt32)parameter[0]; streamLock.WriteLock(); try { if (!streams.TryGetValue(id, out result)) { result = new MessageStream <IMessage> ( new PriorityDispatcher() ); streams.Add(id, result); } return(true); } finally { streamLock.WriteRelease(); } }
public override bool TryGet(ref IMessage message, out IReactiveStream <IMessage, bool> result) { streamLock.ReadLock(); try { return(streams.TryGetValue(message.Id, out result)); } finally { streamLock.ReadRelease(); } }