public void TestTwoCallbackHandlerKeies_AreComparedByVersionIdentityCorrelation()
        {
            var correlationId = Guid.NewGuid().ToByteArray();

            var firstKey = new CallbackHandlerKey
                           {
                               Version = Message.CurrentVersion,
                               Identity = SimpleMessage.MessageIdentity,
                               Correlation = correlationId
                           };
            var secondKey = new CallbackHandlerKey
                            {
                                Version = Message.CurrentVersion,
                                Identity = SimpleMessage.MessageIdentity,
                                Correlation = correlationId
                            };

            Assert.AreEqual(firstKey, secondKey);
            Assert.IsTrue(firstKey.Equals((object) secondKey));

            var thirdKey = new CallbackHandlerKey
                           {
                               Version = Message.CurrentVersion,
                               Identity = ExceptionMessage.MessageIdentity,
                               Correlation = correlationId
                           };
            Assert.AreNotEqual(firstKey, thirdKey);
            Assert.IsFalse(thirdKey.Equals((object) firstKey));
        }
 public IPromise Pop(CallbackHandlerKey callbackIdentifier)
 {
     IPromise promise = null;
     
     IDictionary<MessageIdentifier, IPromise> messageHandlers;
     if(handlers.TryRemove(new CorrelationId(callbackIdentifier.Correlation), out messageHandlers))
     {
         var massageHandlerId = new MessageIdentifier(callbackIdentifier.Version, callbackIdentifier.Identity);
         messageHandlers.TryGetValue(massageHandlerId, out promise);
     }
     
     return promise;
 }