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