예제 #1
0
        private Task handleOperationMessages(IRabbitMQOperation msg)
        {
            if (!RabbitMqMessages.ContainsKey(msg.GetType()))
            {
                RabbitMqMessages[msg.GetType()] = new List <IRabbitMQOperation>();
            }

            RabbitMqMessages[msg.GetType()].Add(msg);

            return(Task.FromResult(msg));
        }
예제 #2
0
        public Task <IRabbitMQOperation> WaitForRabbitMQ <T>(Func <T, bool> lambda) where T : IRabbitMQOperation
        {
            Stopwatch          stopWatch = new Stopwatch();
            IRabbitMQOperation message   = default(IRabbitMQOperation);

            stopWatch.Start();
            while (message == default(IRabbitMQOperation) && stopWatch.Elapsed.TotalMilliseconds < waitForRabbitMQMessage)
            {
                if (RabbitMqMessages.ContainsKey(typeof(T)))
                {
                    List <T> rabbotMessagesCopy = RabbitMqMessages[typeof(T)].Cast <T>().ToList(); //avoid read/write lock
                    message = rabbotMessagesCopy.Where(lambda).FirstOrDefault();
                }
                if (message == default(IRabbitMQOperation))
                {
                    Thread.Sleep(100);
                }
            }
            stopWatch.Stop();

            return(Task.FromResult(message));
        }